【发布时间】:2013-01-23 13:41:11
【问题描述】:
下面的代码编译(gcc 4.7.2 或 icc 13)并产生“1 2”输出。这意味着 const 限定符被删除,即。例如,f<int&> 的参数类型为 int&。
为什么会这样?据我了解,根据§14.3.1.4:
如果模板参数
T的模板参数将类型命名为“引用cv1S”,则尝试创建类型“引用cv2 em>T” 创建类型“reference to cv12S”,其中 cv12 是 cv 限定符 cv1 的并集和cv2。冗余的 cv 限定符被忽略。
const 不应被丢弃。代码如下:
#include <iostream>
using namespace std;
template <typename T>
void f(const T& t)
{
t++;
}
int main()
{
int a = 1;
cout << a;
f<int&>(a);
cout << ' ' << a << endl;
return 0;
}
【问题讨论】:
-
我在 C++98 或 C++03 中都找不到该引用。 §14.3.1 是“模板类型参数”,没有小节或第 4 段。
标签: c++ reference c++03 qualifiers c++98