gpt4 book ai didi

c++ - 引用性与模板函数中的类型无关

转载 作者:行者123 更新时间:2023-11-28 08:08:03 24 4
gpt4 key购买 nike

考虑以下短程序:

#include <type_traits>
#include <iostream>
using namespace std;

template <typename T>
void fn( T t ) {
cout << "T is reference: " <<
boolalpha << is_reference<T>::value << endl;
}


int main( void ) {
int x = 0;
int& r = x;
fn( r );
}

运行这个程序,我得到:T is reference: false
会是解释吗?

最佳答案

C++ 2003 模板类型推导试图找到匹配的参数类型。如果你想将引用作为参数,你需要这样说并且可能适本地重载模板。更改引用实际上通常不是您想要的(尽管您可以删除推导​​类型的引用部分)。通常,引用类型实现的概念与用于值的概念完全不同。另请注意 r只是 x 的另一个名称用于类型推导和重载解析。

在 C++ 2011 中,您可以要求编译器保留更多的类型信息:当使用右值引用符号(即 T&& 对于模板参数 T)推导模板中的类型时,类型将被推导为是对左值适当应用 cv-qualiiiers 的引用,对非左值应用值类型。也就是说,推导的类型本质上取决于参数是否是一个临时对象(或者至少看起来像一个)。

关于c++ - 引用性与模板函数中的类型无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com