gpt4 book ai didi

c++11:为什么静态 constexpr 的类内初始化不是定义?

转载 作者:行者123 更新时间:2023-12-05 03:37:48 25 4
gpt4 key购买 nike

考虑以下简单的问题:

#ifndef TEST_H
#define TEST_H

class Test {
public:
static constexpr int a = 1;
}

#endif

注意:

  1. 没有因宏而导致的 ODR 违规。
  2. 为什么 constexpr static int a 不被视为定义,因为它是在类 Test 中定义的?因为它不是一个定义,所以它需要在类之外的下面。为什么?

constexpr int Test::a;

最佳答案

Why a in-class initialization of a static constexpr not a definition?

由于单一定义规则 (ODR)。该规则规定每个非内联非成员变量和静态成员变量必须只有一个定义。类定义,由于其性质,通常包含在多个翻译单元中。如果类定义包含变量定义,那么包含在多个翻译单元中将违反 ODR。

自 C++17 起,该语言具有内联变量,因此您可以在类定义中定义此类内联变量。

关于c++11:为什么静态 constexpr 的类内初始化不是定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69170923/

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