1

演算子で明示的な構築を使用することは可能ですか?
この例のように (もちろん動作しません):

class myFoo {
    public:
        double x, y;

        myFoo(double, double);

        void    operator [] (myFoo);
};

int main() {
    myFoo f1(0.0, 1.1);
    f1[ {9.9, 10.0} ];          /// or whatever syntax to use, does not work
    f1.operator[] ( {9.9, 10.0} ); /// works !
}
4

5 に答える 5

1

C++11 では、初期化リストをオーバーロードに渡すことができますoperator [](13.5.5 を参照)。

次のようなものが必要です

void operator[](std::initializer_list<double>);

それは元の構文と一致しますf1[ {9.9, 10.0} ];.

于 2011-10-13T14:40:50.157 に答える
1

うーん...

f1[myFoo(9.9, 10.0)];?

合理的に正気である必要があります(つまり、 aが一時的なものにバインドされることをoperator[]期待しています)。const myFoo&

于 2011-10-13T14:10:04.743 に答える
0

はい、現在のコードで動作します。「[]」を使用した実装が何であれ(私が行ったのは、クラス内の配列のインデックスで値を返すことだけです。したがって、クラスを配列型として使用できるようになりました)実行する必要があるすべてのことconst 参照を渡して変更を行わないようにします。

int main() {
    myFoo f1(0.0, 1.1);
    f1[f1];      /// or whatever syntax to use
}

動作します。

于 2011-10-13T14:26:47.717 に答える
0

いいえ、これはoperator []現在の C++03 または今後の C++11 標準では使用できません。operator []ただし、いくつかの奇妙な構文を悪用して、同じことを実現できます。

f1[myFoo(9.9,10.0)];

operator []

myFoo& operator [] (const myFoo&);
于 2011-10-13T14:12:36.957 に答える
0

コードは C++11 (g++ バージョン 4.5.2) で正常に動作します。あなたはただ言う必要があります

f1[myFoo {9.9, 10.0} ];

それ以外の

f1[ {9.9, 10.0} ];
于 2011-10-13T14:46:34.193 に答える