2

从具有 glibc-2.5-25 (suse 10.2) 的计算机移植到具有 glibc-2.3.2-6 (suse 8.2) 的计算机时,我的代码有一个奇怪的问题。我对临时对象使用了几个方法调用,它们在旧机器上不起作用。

class A
{
public:
    A(int n) {}
    void method() {}
};

int main()
{
    A(10).method(); //here the compiler gives parse error before . 

    A a(10);
    a.method(); //this works fine 
}

这真的会因为旧的 libc 版本而发生吗?或者它可能是我的 IDE 中的设置(编译器设置)?

4

2 回答 2

2

为什么 libc 版本会影响解析错误?g++ 版本会更有用。

gcc 在 3.4 版左右更改了它的解析器,并在当时解决了许多在旧的 yacc 解析器中不容易修复的解析问题。这可以解释你所看到的。

于 2010-02-19T14:03:25.943 回答
1

这似乎是一个编译器错误: http: //gcc.gnu.org/ml/gcc-bugs/1998-10/msg00178.html(旧版本,相同的错误)。具有相同语义的解决方法类似于:

#define TEMP(T, x, y) { T _temporary(x); _temporary.y; }

A(10).method(); // is:
TEMP(A, 10, method())

呸。

于 2010-02-19T21:47:48.783 回答