gpt4 book ai didi

c++ - 对 constexpr 函数有点困惑

转载 作者:IT老高 更新时间:2023-10-28 23:14:00 24 4
gpt4 key购买 nike

考虑以下代码:

constexpr const int* address(const int& r)
{
return &r;
}


int main()
{
int x = 10;
constexpr const int* p = address(x); //error

_getch();
return 0;
}

这是一个错误:“函数调用必须在常量表达式中具有常量值”。好的。

两个问题:

  1. 如果“x”声明为静态,则没有错误。为什么?

  2. 如何在编译过程中获取变量地址?它们不是在运行时分配的吗?

最佳答案

If 'x' is declared static, there are no errors. Why?

这是因为程序中总是只有一个 x。它有一个地址(正常情况下在 .data 段中的某处)。

令人困惑的是,staticextern 关键字都将存储持续时间指定为静态(它们的链接不同)

How is it possible to get a variable address during the compilation process? Aren't they allocated at run-time?

具有自动、动态或线程的变量storage durations在运行时分配。静态持续时间变量由编译器分配。 (链接器和操作系统可以更改位置,但他们知道如何修复所有引用)

关于c++ - 对 constexpr 函数有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45609355/

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