Zan*_*ynx 6 c++ gcc cross-platform visual-c++
我在编写需要在Visual Studio 2008和GCC 4.6中编译的C++代码时遇到了问题(并且还需要编译回GCC 3.4):static const int类成员.
其他 问题 还 涉及静态const int的类成员所需的规则.特别是,标准和GCC要求变量在一个且只有一个目标文件中具有定义.
但是,Visual Studio在编译包含.cpp文件中的定义的代码(在调试模式下)时会创建LNK2005错误.
我试图决定的一些方法是:
最后两个选项没有吸引力,我可能不会使用任何一个.第一个选项很简单 - 但我喜欢在标题中有值.
我在答案中寻找的是一个好看的最佳实践方法,用于构建代码以使GCC和MSVC同时满意.我希望有一些我还没有想到的美妙的东西.
我通常更喜欢枚举方式,因为这保证了它将始终被用作立即值并且不会获得任何存储。它被编译器识别为常量表达式。
class Whatever {
enum { // ANONYMOUS!!!
value = 42;
};
...
}
Run Code Online (Sandbox Code Playgroud)
如果您不能这样做,#ifdef请删除MSVC .cpp 中的定义,因为如果您 ifdef 删除声明中的值,它将始终获得存储;编译器不知道该值,因此它无法内联它(好吧,“链接时间代码生成”应该能够在启用的情况下修复该问题)并且不能在需要常量的地方使用它,例如值模板参数或数组大小。