4

MS VC2010 コンパイラを使用して最初の作業を行うクロス プラットフォーム コード ベースを開発しています。その後、GCC (4.7) を使用して Linux でコンパイルします。

「呼び出しに一致する関数がありません..」 GCC のエラー。メソッド パラメーターが非定数参照である場合に主に問題が発生することに気付きました。たとえば、次のようになります。

 void MyClass::DoSomeWork(ObjectSP &sprt, const std::string someName, const std::string anotherName, const std::string path, int index) {


        sprt->GetProp()->Update(path, false);

}

メソッドをこれに変更したら:

 void MyClass::DoSomeWork(const ObjectSP& sprt, const std::string& someName, const std::string& anotherName, const std::string& path, int index) {


        sprt->GetProp()->Update(path, false);

}

GCC は不平を言うのをやめます。VC コンパイラでなぜ発生し、なぜ発生しないのですか?

4

1 に答える 1

9

const 以外の参照をテンポラリにバインドすることは違法です。ただし、歴史的には、VS コンパイラはこれについてあまり厳密ではありませんでした。

そのため、非 const 参照を持つ関数があり、それを一時オブジェクト (関数からの戻り値など) で呼び出す場合、g++ は比較しますが、VS は比較しません。この場合、g++ は正しいです。

可能であれば、常に const 参照を優先してください。

于 2013-09-30T09:41:56.230 に答える