3

如果我有类似的代码

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

这是否会阻止T成为const,volatile或参考?

同样,如果我有

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

这是否意味着T永远不会是const,volatile或参考?

本质上,这是否意味着必须推断构造函数模板参数,即不能指定为推断值以外的任何值?

4

1 回答 1

3

是的,当您调用构造函数模板时,您不能显式指定模板参数。

因为您从不直接调用它,而总是通过强制转换或声明隐式调用它。

您只能在显式特化或实例化时指定它们。这不是真的有用,但可能

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