二进制文本,其值在编译时以 C++ 为单位确定

Binary literals whose value is determined during compile time in C++

本文关键字:C++ 为单位 编译 文本 二进制      更新时间:2023-10-16

如何在不使用预处理器指令的情况下定义常量值二进制文字,其值是在编译时确定的?

我试过这个

#include <iosteam>
using namespace std;

int main()
{
const int x=0b0101;
cout<<x;
return 0;
}

它打印出 5,但是,我不知道它的值是在编译时确定的。我怎么能检查呢?任何帮助表示赞赏!

const

定义时初始化的"变量"通常也是编译时常量。但是,如果您想真正确定使用constexpr而不是const

constexpr int x=0b0101;

通常,您可以检查反汇编的代码以查看会发生什么,并且还有一个站点,https://godbolt.org/

打字

int main()
{
const int x=0b0101;
return 0;
}

那里并禁用优化(-O[x] 开关(,生成如下内容:

main:
push    rbp
mov     rbp, rsp
mov     DWORD PTR [rbp-4], 5
mov     eax, 0
pop     rbp
ret

5在代码中显示为即时值,显然是由编译器提供的。
正如您在其他地方问的那样:没有const也是一样的,CPU 不在乎某个具有地址的实体是否意味着常量。例如const_cast<>不是实际操作,它只是编译器的标记。