C++ 是像';T';是否总是按值进行解释?
考虑以下小例子:C++ 是像';T';是否总是按值进行解释?,c++,templates,C++,Templates,考虑以下小例子: template<typename T> void foo(T a) { ... } struct Bar { ... }; Bar x; foo(x); 模板void foo(ta){…} 结构条{…}; 条形图x; foo(x); 我的问题是:foo(x)是否会被解释为foo(const Bar&x)(x通过引用传递),或者它总是被解释为foo(Bar x)(x通过值传递,即x的显式副本) 在我的具体应用程序中,我的代码依赖于创建副本的事实(x在另一个线程中
template<typename T> void foo(T a) { ... }
struct Bar { ... };
Bar x;
foo(x);
模板void foo(ta){…}
结构条{…};
条形图x;
foo(x);
我的问题是:foo(x)
是否会被解释为foo(const Bar&x)
(x通过引用传递),或者它总是被解释为foo(Bar x)
(x通过值传递,即x的显式副本)
在我的具体应用程序中,我的代码依赖于创建副本的事实(x在另一个线程中使用,而原始x超出范围)。但我不确定我是否可以这样假设。我使用的是GCC 4.6.1。如前所述,Bar对象将按值传递。如果您需要通过引用来定义另一个函数,则始终可以定义它 前
模板void fooByRef(const T&a){…}
如果推导,它将始终按值传递。但是,如果使模板参数显式,则可以通过引用传递它:
foo<Bar&>(x); // will pass by reference
foo<Bar const&>(x); // will pass by reference to const
foo(x);//将通过引用传递
foo(x);//将通过引用传递到const
为什么不在示例中尝试一下呢。我认为T可以是从int到指针的任何东西,等等。
foo<Bar&>(x); // will pass by reference
foo<Bar const&>(x); // will pass by reference to const