[C++] 如何定义一个 class 内常量? - 可打印的版本 +- WeHack BBS (https://bbs.wehack.space) +-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html) +--- 版块: 程序设计讨论区 (https://bbs.wehack.space/forum-14.html) +--- 主题: [C++] 如何定义一个 class 内常量? (/thread-329.html) |
[C++] 如何定义一个 class 内常量? - vimacs - 01-26-2022 今天我在 class 声明中用 static const int 定义一个整形常量,之后在别的地方用它,最后链接失败。最后我只好改用 enum 来定义它。 代码: #include <vector> Bjarne Stroustrup 的 FAQ 里面就建议使用 enum 的方法。[1] GCC 对这个问题的说明 [2] 是,在 class 声明中的 static const int 只是声明,而不是定义,编译时可能会内联这些常量,但是如果要在需要传引用的地方用它,仍然需要定义出来。 另外如果把 const 改为 constexpr, 在 C++ 14 (Clang 默认) 和 C++ 17 (GCC 默认) 标准中还有区别,C++ 17 会认为 static constexpr 是隐式内联的,每个翻译单元会有一个内联定义,而 C++ 14 则没有。所以如果把 const 改为 constexpr, 使用 C++ 17 编译器会链接成功,使用 C++ 14 编译器会链接失败。 [1] http://www.stroustrup.com/bs_faq2.html#in-class [2] https://gcc.gnu.org/wiki/VerboseDiagnostics#missing_static_const_definition |