gpt4 book ai didi

c++ - 在 VS2008 和 GCC 中编译 static const int = X 的最佳代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:34 24 4
gpt4 key购买 nike

我在编写需要在 Visual Studio 2008 和 GCC 4.6 中编译(并且还需要编译回 GCC 3.4)的 C++ 代码时遇到了一个问题:static const int 类成员。

Other questions have covered static const int 类成员所需的规则。特别是,标准和 GCC 要求变量在一个且仅一个目标文件中有定义。

但是,Visual Studio 在编译包含 .cpp 文件中的定义的代码(在 Debug模式下)时会产生 LNK2005 错误。

我试图在其中做出决定的一些方法是:

  • 使用 .cpp 文件中的值而不是 header 对其进行初始化。
  • 使用预处理器删除 MSVC 的定义。
  • 将其替换为枚举。
  • 用宏替换它。

最后两个选项没有吸引力,我可能不会使用任何一个。第一个选项很简单——但我喜欢在 header 中包含值。

我在答案中寻找的是一种外观漂亮的最佳实践方法,用于构建代码以使 GCC 和 MSVC 同时满意。我希望有一些我还没有想到的美妙绝伦的东西。

最佳答案

我通常更喜欢enum 方式,因为这样可以保证它始终被用作即时值,不会获得任何存储空间。它被编译器识别为常量表达式。

class Whatever {
enum { // ANONYMOUS!!!
value = 42;
};
...
}

如果你不能这样做,#ifdef 去掉 MSVC 的 .cpp 中的定义,因为如果你 ifdef 去掉声明中的值,它将总是得到存储;编译器不知道这个值,所以它不能内联它(好吧,“链接时间代码生成”如果启用的话应该能够修复它)并且不能在需要常量的地方使用它,比如值模板参数或数组大小。

关于c++ - 在 VS2008 和 GCC 中编译 static const int = X 的最佳代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263433/

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