1

問題のコードは次のとおりです。型キャストとの間の関連性。 Visual Studioで

void SomeClass::Init(const vector<string>& args) { 
    int argc = (int)args.size(); 
    //... 
} 

私はWindows 7 64ビット版Visual Studio 2015 Update 3で動作します。

私の質問は:オペレータの結合性の私の理解によると、型キャスト(int)とメンバーセレクタ。 (C++ Primer、5edから抜粋したスクリーンショットを参照してください)、評価順序は結合性によって決定する必要があります。しかし、このレベルの連想は残されます。つまり、式は左から右に評価されます。したがって(int)argsが最初に評価され、argsがintに変換されます。 intバージョンのargsは存在しないsize関数を呼び出そうとし、コンパイルエラーを引き起こすはずです。しかし、Visual Studio 2015はエラーを報告せず、期待どおりに動作します。右側の式は、size()関数を最初に呼び出し、返された値をintに変換します。どうして?私の連合性の理解が間違っているのですか、何か不足していますか?ご協力ありがとうございました。

enter image description here

+0

あなたが使用しているのは、関数キャストではなく、メンバーアクセス演算子と優先順位が異なるCスタイルのキャストです。 [ここ](http://en.cppreference.com/w/cpp/language/operator_precedence)を参照してください。 – songyuanyao

+0

@songyuanyao:ありがとう。あなたが正しいです。私の質問に対する答えにあなたの考えを書いてもいいですか? – user5280911

答えて

1

何を使っていることはメンバアクセス演算子よりも低くprecedenceを有し、function castではなく、c-style castことに注意してください。

したがって(int)args.size()(int) (args.size())に相当し、うまく機能します。

関連する問題