我正在学习C++模板,并编写了以下示例:
#include <vector>
#include <iostream>
#include <type_traits>
#include <typeinfo>
using namespace std;
template <typename T>
void fcn(T &&val)
{
cout << is_same<T, int&>::value << endl;
const T t = val;
//T const t = val;
cout << typeid(t).name() << endl;
t = 10;
cout << "val: " << val;
cout << ", t: " << t << endl;
return;
}
int main()
{
cout << boolalpha;
int i{};
fcn(i);
}
我预计这段代码不能成功编译,但是没有出现错误,输出结果为:
true
i
val: 10, t: 10
我有两个问题:
gcc 推断 T 是
int& type
,行const T t = val
,意味着 t 常量绑定到 val,就像这样:const int &t = val
,为什么 const 没有效果?t 和 i 的值可以改变吗?我使用
typeid(t).name()
显示 t 的类型,为什么只打印出i
?