gpt4 book ai didi

c++ - const 常量操作是否在运行时评估?

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

我正在用 C++ 编写一些国际象棋程序,因此我必须对一些大数进行大量按位运算。我想知道,为了性能起见,是否在运行时完成常量操作?或者如果它们在编译期间被评估。例如假设我必须对以下 2 个常量进行 AND:

const unsigned long long FILE_A = ~0x8080808080808080;
const unsigned long long FILE_B = ~0x4040404040404040;

在这样的函数中

unsigned long long join(){
return (FILE_A & FILE_B);
}

FILE_A 和 FILE_B 的 AND 运算是在运行时完成的吗?还是编译器做的?

最佳答案

通常:C++ 编译器可以进行任何优化,只要优化的结果“如同”代码按字面执行即可。

在您给出的示例中,在编译时进行给定计算与在运行时进行计算没有区别;所以现代 C++ 编译器将完全做到这一点。事实上,现代 C++ 编译器,如果 join() 在头文件中定义(带有 inline 属性)——并且如果选择了适度的优化级别——将不仅在编译时进行计算,而且将 join() 完全优化掉,并在使用 join() 的地方直接注入(inject)计算常量,使额外的编译时间成为可能优化。这是因为如果没有任何优化,结果将与结果无法区分。

关于c++ - const 常量操作是否在运行时评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781063/

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