繁体   English   中英

内联 static constexpr 与全局内联 constexpr

[英]inline static constexpr vs global inline constexpr

假设我在 header 文件中有一些inline constexpr变量(命名为default_ydefault_x ),我决定将它们移动到与它们完全相关的 class 并将它们标记为static (因为它在设计方面看起来更好)。

namespace Foo
{

inline constexpr std::streamsize default_size { 160 }; // not closely related to the class Bar

class Bar
{
public:
    inline static constexpr std::uint32_t default_y { 20 }; // closely related to the class Bar
    inline static constexpr std::uint32_t default_x { 20 }; // closely related to the class Bar
};

}

所以问题是,这会在程序开始时如何以及何时初始化它们(以及整体效率)方面产生影响吗? 这个特定用例中的inline关键字是否会强制编译器为这两个变量添加一些保护措施并降低访问它们的速度? 或者可能因为它们是constexpr ,所以不需要在运行时做这些事情,因为它们的值可以从可执行文件的只读部分检索,然后在线程开始时分配给它们?

我用inline static和一次static构建了程序,与之前的解决方案相比,二进制文件的大小没有差异,所以 linker 可能生成了完全相同的代码(希望如此)。

放置static inline constexpr变量不应以任何方式影响效率。 由于constexpr ,如果可能的话,它们会在编译时进行常量初始化。 这里的inline关键字帮助您在class的主体内初始化static变量。 您可能会发现关于inline关键字的此材料很有趣: https://pabloariasal.github.io/2019/02/28/cpp-inlining/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM