C++ 对于模板类Foo方法的参数,为;福安&引用;及;富<;T>&&引用;相同的?
以班级为例C++ 对于模板类Foo方法的参数,为;福安&引用;及;富<;T>&&引用;相同的?,c++,templates,C++,Templates,以班级为例 template <typename T> struct Foo { Foo(const Foo<T>& other) {} }; 模板 结构Foo{ Foo(const Foo&other){} }; 对于构造函数参数类型,constfoo&和constfoo&在此上下文中是否相同?我一直认为不是,认为后者可以调用Foo f=Foo(),而前者不能。但是现在我不确定是否是这样。在类模板中,类模板参数对于每个实例化都有一个唯一的含义。这意味着
template <typename T>
struct Foo {
Foo(const Foo<T>& other) {}
};
模板
结构Foo{
Foo(const Foo&other){}
};
对于构造函数参数类型,
constfoo&
和constfoo&
在此上下文中是否相同?我一直认为不是,认为后者可以调用Foo f=Foo()
,而前者不能。但是现在我不确定是否是这样。在类模板中,类模板参数对于每个实例化都有一个唯一的含义。这意味着Foo
具有T==int
,因此模板化的ctor是Foo::Foo(const-Foo&other)
可以有其他模板参数,但:
template <typename T>
struct Foo {
template <typename U>
Foo(const Foo<U>& other) {}
};
模板
结构Foo{
模板
Foo(const Foo&other){}
};
现在T
可以不同于U
是的,它是相同的
这是由于注入的类名造成的。类名被插入到所有类的作用域中,以便名称查找操作合理。当注入的类名用作模板类中的类型名时,它相当于模板名,后跟
([temp.local]/1
)中包含的模板参数,因此Foo
在该上下文中相当于Foo
。可能重复,因为答案已经说过,是合法的。这不是模棱两可的,因为你不能同时拥有class Foo
和class Foo