3

次のようなコードがある場合

struct Foo
{
    template<class T>
    Foo(T arg) { }
};

それは、、、または参照にTなることを防ぎますか? constvolatile

同様に、私が持っている場合

struct Bar
{
    template<class T>
    Bar(T const volatile &arg) { }
};

、、または参照にTなることは決してないということですか?constvolatile

本質的に、それはコンストラクターのテンプレート パラメーターを推測する必要がある、つまり、推測された値以外のものを指定できないということですか?

4

1 に答える 1

3

はい、コンストラクター テンプレートを呼び出すときに、コンストラクター テンプレートのテンプレート引数を明示的に指定することはできません。

直接呼び出すことはありませんが、常にキャストまたは宣言を介して暗黙的に呼び出すためです。

明示的に特殊化またはインスタンス化する場合にのみ指定できます。それはあまり役に立ちませんが、可能です

// explicit instantiation
template Bar::Bar<const int>(const int);
于 2013-03-31T17:41:00.180 に答える