【发布时间】:2020-07-26 07:15:39
【问题描述】:
当使用对模板参数类型的 const 引用时,C++ 11 如何进行模板推导让我有点困惑。考虑以下程序:
template <typename T> void test_func(const T &a){
(*a)++;
}
int main() {
// 1st case
int i = 1;
test_func(&i);
// 2nd case
const int* cPtr = &i;
test_func(cPtr);
}
我的问题是:
- 对于第一种情况,编译正常;所以看起来实例化的模板函数参数是
int* const &a(顶级常量);但是如果我们直接替换T withint*, we getconst int* &a`(一个低级的const),编译器应该会失败;我们如何以“const T &a”的格式表达一个低级的 const;我很困惑参数的真实类型是什么,T的类型是什么; - 对于第二种情况,编译失败并显示
似乎第二个实例化函数也继承了低级 const;那么参数的类型是什么;error: increment of read-only location `*(const int*)a;'T的类型是什么;
【问题讨论】:
-
const T &a显然是“对 T 的 const 引用”。如果将const int*传递为T会不会很奇怪和令人惊讶,突然你会得到“对T 的非常量引用,其中T 是const int*”?我会觉得这很违反直觉。
标签: c++ function-templates const-reference