C++如何在这个程序中执行cout
C++ How cout is excuted in this program?
如何先执行tryout.main()cout,然后打印main()函数cout,最后打印tryout.man()的返回值。这有点令人困惑。有人能解释吗?
#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
这是一个经过编辑的答案。Igor Tandetnik证明我错了,由于我的答案被(错误地)接受并获得了最高票数,我决定重写它以使其正确。
在我们的案例中,
foo() = ostream& ostream::operator<<(const char*)
序列中的执行顺序
obj.foo("str").foo(fun())
可能是:
obj.foo("str");
fun();
obj.foo(fun_res);
或
fun();
obj.foo("str");
obj.foo(fun_res);
在您的案例中,发生了后者,但前者也是有效的执行令。
订单保证如下:
fun()
将发生在obj.foo(fun_res)
之前,因为该调用需要foo的结果- CCD_ 5将发生在CCD_ 6之前
因此,上述两种情况是可能的。
表达式中子表达式的求值顺序通常是未指定的。可以在执行CCD_ 8之前或之后合法地调用CCD_。在您的情况下,它恰好以前被调用过。
"<<"实际上是语法糖
cout << "Hello"
你实际上是在给打电话
ostream& operator<<(ostream&, const char*)
或
ostream&ostream::运算符<lt;(常量字符*)
为了方便起见,我假设是后者。当你写
std::cout<<"In Main function: "<<tryout.main()<<std::endl;
这将编译为
cout.operator<<("In Main function: ").operator<<(tryout.main()).operator<<(std::endl);
所以你写的代码
<<tryout.main()<<
says:"调用tryout.main(),获取返回值,并将其传递给"ostream::operator<lt;(int)",使用上一个<<.返回的ostream
因此,现在调用并执行tryout.main(),它独立地完成自己的输出,然后返回0。
现在,您的主函数能够以返回值0作为参数来完成它的调用链。
你不能用调试器来完成这个过程是有原因的吗?
相关文章:
- 如何在程序执行时查看Valgrind Massif输出(或其他堆分析器)?
- 如何进行程序执行检查
- 捕获异常后如何退出程序执行
- 在程序执行期间从标准输出重定向到自定义流
- 为什么 C++ openMP 程序执行时间更长
- 从Qt应用程序执行MSI文件
- 应用程序执行器 vs lpsz用户名 ADsOpenObject.
- C++:程序执行时"Not Responding"
- JIT 编译器及其在 C++ 前面加快 .NET 中程序执行速度的好处
- 如何让 c++ 程序执行以响应文件打开
- 防止从其他程序执行库中的函数
- Visual样本存储过程从C 程序执行
- 程序执行因细分故障而停止:11
- 注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)
- 程序执行基本操作所花费的总时间
- 停止直接执行主应用程序并从第二个应用程序执行它
- 引用变量在下一行程序执行后显示未找到的行为
- C 可以在程序执行过程中移动内存映射的文件(boost :: intercecess)移动
- glLinkProgram() 在程序执行中未定义,即使 glew 报告它存在
- 标准 C++ 程序执行期间的函数调用