gpt4 book ai didi

c++ - 使 'const' 使用类型特征的结果

转载 作者:太空狗 更新时间:2023-10-29 21:43:36 26 4
gpt4 key购买 nike

int main(int argc, char* argv[]) {
const int i = 10;
using Type = typename std::conditional<false, int, int&>::type;
const Type r = i; // It seems this 'const' does not have any effect.
std::cout << r << std::endl;
}

上述代码无法在gcc4.8.1 -std=c++11上编译,错误信息如下:“invalid initialization of reference of type {aka int&} from expression of type 'const int' . 但是,如果我像这样更改代码,它将起作用:

int main(int argc, char* argv[]) {
const int i = 10;
using Type = typename std::conditional<false, const int, const int&>::type;
Type r = i;
std::cout << r << std::endl;
}

有没有人可以告诉我原因?

最佳答案

在第一个示例中,const 没有效果,因为它绑定(bind)到错误的类型:在引用之后而不是之前。参见 https://www.securecoding.cert.org/confluence/display/cplusplus/DCL33-CPP.+Never+qualify+a+variable+of+reference+type+with+const+or+volatile了解一些可能有帮助的细节,但基本上:

const int& // reference to immutable int
int const& // reference to immutable int
int& const // immutable reference to int

当然,所有引用都是不可变的(无法重新设置),因此您拥有的最后一个引用有点无用。发生这种情况是因为您在引用已应用于该类型之后应用了 const,这为您提供了我编写的第三个示例,而不是第一个或第二个。

关于c++ - 使 'const' 使用类型特征的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com