为什么不将 const 引用视为使用 is_const 类型特征的 const?

Why isn't a const reference considered const using the is_const type trait?

我很惊讶下面的代码:

#include <iostream>
#include <type_traits>

using namespace std;

int main(int argc, char* argv[]) {
    cout << boolalpha << is_const<const float&>::value << endl;

    return 0;
 }

打印 false。正确删除引用:

#include <iostream>
#include <type_traits>

using namespace std;

int main(int argc, char* argv[]) {
    cout << boolalpha << is_const<remove_reference<const float&>::type>::value << endl;

    return 0;
 }

正在打印 true

两者都是用 g++ -std=c++11 test.cpp 编译的,使用 G++ 版本:

g++ (Ubuntu 5.3.0-1ubuntu1~14.04) 5.3.0 20151204

仔细想想,我可以理解这里有两种类型:引用类型和被引用类型。引用的类型是 const,所以第二种情况是有意义的。对于第一种情况,如果引用类型是 const 或总是 true,我希望它是 return,因为引用 AFAIK 不能是 "reassigned"。

为什么 return false 而不是?

结果正确。

参考文献永远不会 const,因为它们不能 cv-qualified。你说它们不能被重新分配是正确的(并且在某种意义上是不可变的),但这与 const-qualified 不同。

如果你得到true纯粹是因为referentconst,那和is_const的意思完全不符所有其他情况。例如,考虑指针。 is_const<int const*>::value 应该是什么?