Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于模板类Foo方法的参数,为;福安&引用;及;富<;T>&&引用;相同的?_C++_Templates - Fatal编程技术网

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