gpt4 book ai didi

c++ - 为什么我应该更喜欢类中的 static constexpr int 而不是类级整数常量的枚举?

转载 作者:可可西里 更新时间:2023-11-01 16:04:36 25 4
gpt4 key购买 nike

C++17 更新:static constexpr 变量是隐式内联,因此不需要外部定义。


原始问题:

假设我有一个常量列表,例如

struct Cls {
static constexpr int N = 32;
static constexpr int M = 64;
};

这当然建议我为这些添加定义以避免可能发生的 ODR 使用问题,因此我需要:

constexpr int Cls::N;
constexpr int Cls::M;

为什么应该我更喜欢这个

struct Cls {
enum : int {
N = 32,
M = 64
};
};

这让我免于 ODR 使用的麻烦,因为 NM 更真实地只是常量,而不是对象本身(如果这是标题,那就更重要了-only)并且更短。我可以显式指定类型 enum : long long 或任何需要的类型。第一个有什么好处?

最佳答案

一个区别是您可以获取 static constexpr 的地址,但不能获取 enum 的地址。

另一个是旧版本的语言不支持 constexpr(它是在 C++11 中引入的)。

只有当值属于一起时,我才会使用 enum。我还会给 enum 一个描述这种关系的名称。我不会使用 enum 来定义不相关的常量。

关于c++ - 为什么我应该更喜欢类中的 static constexpr int 而不是类级整数常量的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213098/

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