gpt4 book ai didi

c++ - 编译器是否假定私有(private) const 成员*从不*改变?

转载 作者:行者123 更新时间:2023-11-30 04:27:27 28 4
gpt4 key购买 nike

class A{
const size_t number;
public:
A(size_t number): number(number) {}
void f(){
//read number, possibly save in CPU register
//call a function that the compiler can't inspect
// so it should assume that anything in the program state changed
//read number again
}

在那里,它再次读取number,编译器(如果优化开启)是否仍然假设它不能改变,因为它是const,所以读取来自 CPU 寄存器的标志,如果它之前被放置在其中之一?

最佳答案

答案是这取决于特定编译器的实现细节。
const correctness 的主要目的是防止自己犯无意的错误,编写更直观、易于维护的代码。
编译器优化应该(几乎)永远不会成为制作const 的标准。

一个好的编译器可能会应用它的优化并内联 const 变量,其他的可能不会。
一些因素,如 const 变量的地址是否在某处获取,也可能影响编译器处理它的方式。

最后也是最重要的一点,无论编译器如何处理它,一旦您声明了一个变量 const,您的代码应该始终假定它是const,永远不要修改它,用任何 hackery 修改它都会导致未定义的行为。

关于c++ - 编译器是否假定私有(private) const 成员*从不*改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911107/

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