0

tryout.main() cout が最初に実行され、次に main() 関数 cout が出力され、最後に tryout.main() の戻り値が出力される方法。これは少し混乱します。誰でもそれを説明できますか?

#include<iostream>
using namespace std;
class TryOut
{
public:
 int main()
 {
    std::cout<<"In TryOut Main Function "<<std::endl;
    return 0;
 }
};

int main(int argc, char **argv)
{
TryOut tryout;
std::cout<<"In Main function: "<<tryout.main()<<std::endl;
return 0;
}

出力:

In TryOut Main Function 
In Main function: 0
4

3 に答える 3

0

C++ の「<<」は、実際にはシンタックス シュガーです。

cout << "Hello"

あなたは実際にどちらかを呼んでいます

ostream& operator<<(ostream&, const char*)

また

ostream& ostream::operator<<(const char*)

便宜上、後者を仮定します。あなたが書くとき

std::cout<<"In Main function: "<<tryout.main()<<std::endl;

これはコンパイルされます

cout.operator<<("In Main function: ").operator<<(tryout.main()).operator<<(std::endl);

だからあなたが書いたコード

<<tryout.main()<<

「tryout.main() を呼び出し、戻り値を取得し、それを「ostream::operator<<(int)」に渡します。前の << によって返された ostream を使用します。

そのため、tryout.main() が呼び出されて実行され、独自の出力がまったく独立して行われ、0 が返されます。

これで、メイン関数は戻り値 0 を引数としてコール チェーンを終了できます。

デバッガーでこれをステップ実行できなかった理由はありましたか?

于 2013-07-25T08:08:48.447 に答える