gpt4 book ai didi

c++ - 全局const var声明一次,有可能吗?

转载 作者:行者123 更新时间:2023-12-03 07:22:45 25 4
gpt4 key购买 nike

我有一个头文件,其中包含我正在制作的DLL中所需的所有const值,例如:

// myHelpers.hpp
const int kMaxNumVoices = 16;
const int kMaxBeats = 32;
....
等等。一旦在每个.cpp上包含.hpp,我就可以在std::array定义中使用这些常量。
从理论上讲,问题在于,这将违反 ODR,因为每个编译单元都会使用每个var的副本(即使它们是const的),对吗?
这可以接受吗?还是可以处理一些未定义的行为?如果不能接受,那么正确的选择是什么?

最佳答案

特别是当您打算将这些常量用作非类型模板参数时(如std::array),最好的方法是将它们限定为constexpr

constexpr int kMaxNumVoices = 16;
constexpr int kMaxBeats = 32;
但是,为了不违反ODR,您不得对其进行ODR使用(例如,获取其地址,有关更多信息,请参见 this thread)。这基本上适用于 const限定的变量相同的限制。
将代码库迁移到C++ 17之后,请另外将它们标记为 inline:
constexpr inline int kMaxNumVoices = 16;
constexpr inline int kMaxBeats = 32;

关于c++ - 全局const var声明一次,有可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606110/

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