以下のコードでは、呼び出しの順序を理解するのが難しいです。 私は私が手出力は私がコールstd::cout<< b->fooA() << b->fooB() << std::endl
が演算子の実行順序<<
std::cout.operator<<(b->fooA()).operator<< (b->fooB())
を呼び出すことと同等であったと考え
BA12
であることを確認することができますが
A1B2
以下の出力を見て期待していましたしかし、私はこれが事実ではないことがわかります。これがどのように機能するのか、グローバルoperator<<
との関係を理解するのを手伝ってもらえますか?これは最後にこの順番で呼ばれていますか?
よろしく
AFAG
#include <iostream>
struct cbase{
int fooA(){
std::cout<<"A";
return 1;
}
int fooB(){
std::cout <<"B";
return 2;
}
};
void printcbase(cbase* b){
std::cout << b->fooA() << b->fooB() << std::endl;
}
int main(){
cbase b;
printcbase(&b);
}
とすることができます。しかし、評価の順序が明確になっているという誤った仮定をしています。ありません。それだけです。 –
ここでは部分式評価の順序は保証されていません(*は*が重複していますが、今は正常な正規の質問を見つけることができません) –
'AB12'または' BA12'は可能な出力です。 'A1B2'は(うまくいけば)できません。 – jrok