c++ - 删除 constexpr 会改变链接吗?

标签 c++ static constexpr linkage

我在 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/

相关文章:

c++ - C++14 标准中哪里说不能在 constexpr 函数的定义中使用非 constexpr 函数?

c++ - 为什么通过 const 引用传递 constexpr 对象有效,但按值不编译

c++ - 自动内存分配如何在 C++ 中实际工作?

c++ - NaN 的 Armadillo 最大/最小函数处理?

C++,静态对象的构造函数中的异常绕过先前静态对象的析构函数

c - 如何在 C 中创建静态 volatile 结构数组?

c++ - 传递 constexpr 函数以在编译时使用

c++ - Qt中如何实现快捷输入框

c++ - 对多边形和环使用 boost::geometry::within() 的奇怪行为

c - 静态或指针当 "Returning"数组