我尝试了以下代码:
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::is_const<std::add_const<int*&>::type>::value;
}
并且输出为0.这是正确的行为吗?
答案 0 :(得分:6)
引用不能const
- 合格,因此std::add_const
是参考类型的无操作。
当你想到它时(is clearly stated in standard library reference material),这是有道理的,但乍一看可能会令人惊讶。
答案 1 :(得分:1)
std::add_const
并不能完全按照您的想法行事:
如果T是参考,函数或顶级const限定类型,然后键入 应命名与T 相同的类型,否则为T const。
(从20.10.7.1 Const-volatile modified N4140中的表52,强调我的)
如您所见,std::add_const
未为参考类型添加const
。
但是,首先不断引用的是什么,无论如何它们都是不可变的。 (不要与const
与非const
的引用相混淆。)
答案 2 :(得分:0)
来自std::add_const
文档:
http://en.cppreference.com/w/cpp/types/add_cv
提供与T相同的成员typedef类型,除了它 添加了一个cv-qualifier(除非T是一个函数,一个引用,或已经 有这个cv-qualifier)
答案 3 :(得分:0)
如果我们查看std::add_const的cpprefernece文档,我们会看到它:
提供与T相同的成员typedef类型,除了它添加了cv-qualifier(除非T是函数,引用,或者已经有此cv-qualifier )
这符合C ++标准草案第20.10.7.1节“容易变化的修改”,其中对add_const
说明如下:
如果T是引用,函数或顶级const限定类型,则键入 应命名与T相同的类型,否则为T const。