C ++ std :: add_const无法正常工作?

时间:2015-11-02 15:14:35

标签: c++ typetraits

我尝试了以下代码:

#include <iostream>
#include <type_traits>
int main() { 
    std::cout << std::is_const<std::add_const<int*&>::type>::value;
}

并且输出为0.这是正确的行为吗?

4 个答案:

答案 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。