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 に答える