作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究 C++ 模板,但我一直在思考 const 和作为模板函数参数的类型之间的交互。具体来说,我正在考虑在模板参数列表之外应用时常量如何与模板类型交互。
我曾尝试在 C++ Primer 5th ed (Lippman) 和 C++11 标准草案中寻找这种交互,但是 const 在这种情况下要么没有明确提及,要么(在标准的情况下)相当复杂它的描述(我对 C++ 还是有些陌生)。
这是我的问题的代码示例:
template<typename T>
const T & constify(T & t) {
return t;
}
...
int* i = 0x12345678;
constify(i);
我对返回类型有两种不同的期望:
const (int *) &
,即const是在后面应用的,所以我们不能修改int指针,但可以修改它指向的内容。const int * &
,即所有的声明符和限定符都是一次应用的,而不是像1中那样。这里,我们不能再修改整数指向的int , 但我们可以修改指针本身。对我来说,第一个更有意义,因为它背后有一个自然的“类替换”规则,类似于 typedef。但我的问题是;以下哪些(如果有)是正确的,为什么?
最佳答案
模板类型替换不是文本类型,因此不要根据文本类型定义来考虑它们。
在您的示例中,T 被推断为 int *
- 我们称它为 intptr
。您正在对它进行 const
引用,因此返回值变为 const intptr&
。也就是说,不能通过这个引用修改指针本身,但是可以修改它指向的值。
最后但并非最不重要的一点是,您可以在提问之前轻松验证您的假设 :)
关于c++ - 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654939/
我是一名优秀的程序员,十分优秀!