在C 编程语言中 静态数组的替代模板,c – 类模板中静态constexpr数组的正确初始化?...

博客探讨了C++中静态constexpr成员的定义和初始化问题,特别是当它们在类模板中时。作者指出,静态constexpr成员需要在类外定义并初始化,并提供了一个模板类的示例。文章讨论了正确的语法,包括在模板定义中定义静态constexpr数组,以及这是否适用于非数组成员。GCC编译器成功链接了这种用法,但作者对于是否正确感到疑惑。
摘要由CSDN通过智能技术生成

C中的静态类成员由于标准的语言对我造成了一些混乱:

9.4.2 Static data members [class.static.data]

The declaration of a static data member in its class definition is not a definition…

然而,一个constexpr需要被初始化(AFAIK,在标准中找不到引号)(例如在类定义中).

由于对constexpr的限制,我实际上忘记了静态成员在类之外定义的必要条件,直到我尝试访问一个静态constexpr数组. This related question提供了定义数组成员的正确方法,但我对类模板中对此定义的影响感兴趣.

这是我最终的结论:

template

class MyClass

{

private:

static constexpr std::size_t _lut[256] = { /* ... */ };

T _data;

public:

static constexpr std::size_t GetValue(std::size_t n) noexcept

{

return _lut[n & 255];

}

// ...

};

template

constexpr std::size_t MyClass::_lut[256];

这是正确的语法吗?特别是在定义中使用模板感到尴尬,但是GCC似乎正在将一切都适当地链接起来.

作为一个后续问题,应该类似地定义非数组静态constexpr成员(模板定义在类之外)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值