【发布时间】:2017-09-14 06:15:51
【问题描述】:
以下代码未由特定编译器编译。
#include <iostream>
using namespace std;
class A{
public:
static const int x = 12;
static const int y = 16;
};
int main(){
int a = 12, b = 19;
int z = (a==b)?(A::x):(A::y);
cout<<z<<endl;
return 0;
}
编译器g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) 编译成功。
编译器 g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) 导致编译错误
test.cpp:(.text+0x20): undefined reference to `A::x'
test.cpp:(.text+0x28): undefined reference to `A::y'
如果我将int z = (a==b)?(A::x):(A::y); 行中的条件(a==b) 替换为true 或false,则编译成功。
是什么原因以及如何为指定的编译器修复它?
【问题讨论】:
-
您似乎发现了一个已修复的编译器错误。
-
后面的编译器可能能够将其全部优化为
z = 16。看看生成的机器码看看。 -
你在打开 C++0x/11 的情况下编译了吗?无法重现here
标签: c++ linux g++ ternary-operator