gpt4 book ai didi

c++ - 在哪里定义编译时常量?

转载 作者:行者123 更新时间:2023-11-28 04:04:51 25 4
gpt4 key购买 nike

我做了一个 super 简单的设计来开始解决问题。

enter image description here

现在,这乍一看似乎非常微不足道,但由于有很多方法可以做到这一点,由于我缺乏专业经验,这让我很困惑。

我应该在哪里定义那些编译时间常量? (总是假设我使用的是当前最高的 C++ 标准版本)

在命名空间中?类(class)里面?在.h 类之外?在课外的.cpp 中?只是将它们用作神奇数字并添加一些评论?静止的?非静态?常数?构造函数?模板甲板尺寸以防它更大?

我想到的:

class JolloManager
{
private:
constexpr static int rounds = 3;
constexpr static int deckSize = 52;
constexpr static int princeId = 1;
constexpr static int princessId = 2;
std::array<int, deckSize> deck;
public:
JolloManager() {};
};

这是正确的吗?

最佳答案

在 C++17 中,定义编译时整数常量很容易。

首先,您应该决定常量是否应该限定在一个类中。如果将其作为类成员有意义(例如,它与类所表示的概念有关),则将其设为类成员。否则,不要。

作为类(class)成员,写:

class JolloManager {
constexpr static int rounds = 3;
};

就是这样。 C++17 不再需要外联定义。

如果它不是类成员,但您希望包含您的 header 的每个人都能够访问该值,那么请在 header 中写入:

inline constexpr int rounds = 3;

(从技术上讲,使用 inline 的原因是当变量被多个翻译单元中的内联函数使用 ODR 时,避免 ODR 违规。)

如果该值是只有一个 .cpp 文件需要访问的实现细节,则在该 .cpp 文件中写入以下内容以为其提供内部链接(< em>即, 防止与其他翻译单元中的名称冲突):

constexpr int rounds = 3;  // no `inline` this time

最后,如果只有一个函数需要常量,您可以将其设为该函数的本地常量:

void foo() {
constexpr int rounds = 3;
}

关于c++ - 在哪里定义编译时常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58918668/

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