gpt4 book ai didi

c++ - 如何定义指向 constexpr 变量的指针?

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

在 C++ Primer 5th 中,它说

constexpr imposes a top-level const on the objects it defines.

那么我如何声明一个带有 constexpr 说明符的指针并强加一个低级常量,即指向一个 constexpr 对象的指针?

最佳答案

constexpr 对象与其他任何对象一样。它的值是在编译时计算的这一事实并没有改变这一点。

通常,如果编译器知道永远不需要它们,例如当对象是 static const 时,它会设法避免实际发出代码来创建 const 值和对象。

通过获取对象的地址,无论是 constexprstatic const 还是自动变量,编译器都被迫实际创建对象。

所以:

constexpr int i = 5;    // need not be actually created

const int* pi = &i; // but now it must be, because we took its address

constexpr const int* pi2 = &i; // constexpr pointer to const object - we took its address so it must exist


const void emit(int);

int main()
{
emit(i);
emit(*pi);
emit(*pi2);
}

结果:

main:
subq $8, %rsp
movl $5, %edi <-- compiler knows it's a fixed value
call emit(int)

movq pi(%rip), %rax <-- compiler dereferences the pointer
movl (%rax), %edi
call emit(int)

movl $5, %edi <-- compiler knows it's a fixed value
call emit(int)

xorl %eax, %eax
addq $8, %rsp
ret
pi:
.quad i
i:
.long 5

关于c++ - 如何定义指向 constexpr 变量的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789026/

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