自增自减问题

SmallCoder1992 2013-05-24 07:21:26


请问这作何解释???不明白
...全文
200 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmallCoder1992 2013-05-25
  • 打赏
  • 举报
回复
谢谢大家,无意间看见别人问的,所以就想搞清楚!
mujiok2003 2013-05-25
  • 打赏
  • 举报
回复
引用 16 楼 u010222864 的回复:
[quote=引用 15 楼 mujiok2003 的回复:] 思考一下^_^

#include <iostream>

std::ostream& get()
{
	return std::cout;
}

template <typename T>
std::ostream& fool(std::ostream& os, T const& v)
{
	return os << v;
}

int main()
{
	{

		int n = 5;
		fool(fool(get(), n++), n--);
	}
	//may not same as 
	{
		
		int n = 5;
		std::ostream& os = fool(get(), n++);
		fool(os, n--);
	}
	return 0;
}

不明白为什么!能解释一下吗??[/quote] 看看汇编代码,一目了然。
SmallCoder1992 2013-05-25
  • 打赏
  • 举报
回复
引用 15 楼 mujiok2003 的回复:
思考一下^_^

#include <iostream>

std::ostream& get()
{
	return std::cout;
}

template <typename T>
std::ostream& fool(std::ostream& os, T const& v)
{
	return os << v;
}

int main()
{
	{

		int n = 5;
		fool(fool(get(), n++), n--);
	}
	//may not same as 
	{
		
		int n = 5;
		std::ostream& os = fool(get(), n++);
		fool(os, n--);
	}
	return 0;
}

还有个问题想问你一下,你get函数作为返回值,为什么return返回的不是引用呢??而直接是std::cout ??我也不明白
SmallCoder1992 2013-05-25
  • 打赏
  • 举报
回复
引用 15 楼 mujiok2003 的回复:
思考一下^_^

#include <iostream>

std::ostream& get()
{
	return std::cout;
}

template <typename T>
std::ostream& fool(std::ostream& os, T const& v)
{
	return os << v;
}

int main()
{
	{

		int n = 5;
		fool(fool(get(), n++), n--);
	}
	//may not same as 
	{
		
		int n = 5;
		std::ostream& os = fool(get(), n++);
		fool(os, n--);
	}
	return 0;
}

不明白为什么!能解释一下吗??
mujiok2003 2013-05-25
  • 打赏
  • 举报
回复
思考一下^_^

#include <iostream>

std::ostream& get()
{
	return std::cout;
}

template <typename T>
std::ostream& fool(std::ostream& os, T const& v)
{
	return os << v;
}

int main()
{
	{

		int n = 5;
		fool(fool(get(), n++), n--);
	}
	//may not same as 
	{
		
		int n = 5;
		std::ostream& os = fool(get(), n++);
		fool(os, n--);
	}
	return 0;
}

SmallCoder1992 2013-05-25
  • 打赏
  • 举报
回复
引用 13 楼 nirvana_newbie 的回复:
每个编译器不一样,结果也不同。你可以这样去查看原因。F9设断点,然后ALT+8去看汇编代码。我的博客里有一篇讨论自增自减问题的文章,你可以参考一下。
好的,谢谢!
nirvana_newbie 2013-05-25
  • 打赏
  • 举报
回复
每个编译器不一样,结果也不同。你可以这样去查看原因。F9设断点,然后ALT+8去看汇编代码。我的博客里有一篇讨论自增自减问题的文章,你可以参考一下。
窗外蓝天 2013-05-24
  • 打赏
  • 举报
回复
引用 3 楼 billzheng 的回复:
It's not defined in C++ standard, it's compiler defined behavior.
++
Henryinferno 2013-05-24
  • 打赏
  • 举报
回复
未定义行为。。我记得有个置顶帖将的很清楚吧
zaixiankaifa 2013-05-24
  • 打赏
  • 举报
回复
认真看看《C++ primer plus》这本书,里面有详细的讲解
绯红女王 2013-05-24
  • 打赏
  • 举报
回复
哎~~~ 这种运算符每个环境都不同的,遇到这种题,直接写个“不知道”就好了,谁要敢骂你,那人绝对是傻逼!
hugett 2013-05-24
  • 打赏
  • 举报
回复
这是未定义行为。。跟编译器有关的。。研究这个没意思。。。
SmallCoder1992 2013-05-24
  • 打赏
  • 举报
回复
引用 4 楼 luqichao 的回复:
[quote=引用 3 楼 billzheng 的回复:] It's not defined in C++ standard, it's compiler defined behavior.
同意楼上的说法。 请不要无聊的每天整这玩意。这种无聊的玩意,每家的编译器不同,得到的结果是不一样的。 若不信可以多换几个编译器试试吧[/quote] 刚才一起试了一下,才知道是这个原因,谢谢!
Carl_CCC 2013-05-24
  • 打赏
  • 举报
回复
这类题目还是很多人问的,基本是周期性问题,主流编译器都是重右往左(虽然C99未定义),其实应该搞个置顶贴,避免新人周期性提问。
apexMing 2013-05-24
  • 打赏
  • 举报
回复
引用 3 楼 billzheng 的回复:
It's not defined in C++ standard, it's compiler defined behavior.
同意楼上的说法。 请不要无聊的每天整这玩意。这种无聊的玩意,每家的编译器不同,得到的结果是不一样的。 若不信可以多换几个编译器试试吧
billzheng 2013-05-24
  • 打赏
  • 举报
回复
It's not defined in C++ standard, it's compiler defined behavior.
Carl_CCC 2013-05-24
  • 打赏
  • 举报
回复
重右往左算。
geekjack 2013-05-24
  • 打赏
  • 举报
回复
......

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧