我在 header 中定义了一个简单的配置结构,其中包含一系列其他简单结构,这些结构只是静态变量的容器。这是一个例子:
// Config.h
struct Config {
struct Server {
static constexpr const char* url = "http://example.com";
static constexpr float polling_interval = 1.0f;
};
struct Window {
static constexpr int width = 1920;
static constexpr int height = 1200;
};
};
我在需要的地方包含头文件并像这样访问变量:Config::Window::width
这工作正常但在某个时候我需要从文件加载值所以我将变量声明更改为不是常量(例如 static constexpr int width = 1920;
变成 静态宽度;
)。现在链接器提示变量的 undefined symbol 。 static constexpr
对象的链接是否与 static
对象的链接相同?还有什么我想念的吗?
最佳答案
与联动无关
在声明中指定值的静态常量可用作常量表达式,并且不需要为该用法定义。
如果静态变量不是常量(因此值需要在运行时存储在某处)或者如果它们是odr-used(粗略地说,如果您获取它们的地址或者形成对它们的引用,这再次意味着它们需要在运行时存在于某个地方。
关于c++ - 删除 constexpr 会改变链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25366091/