PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 这时的cout<<里,为什么还可以印出1??
楼主:
Zephyr750
(红莲西风750)
2017-09-25 18:48:00
开发平台(Platform): (Ex: Win10, Linux, ...)
windows
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
visual studio 2008
win32 console
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
none
问题(Question):
add one: 2
add one return : 2
i: 1 <
作者: dannypsnl (秦书)
2017-09-25 19:16:00
我猜啦,同一行决议顺序没有规定
作者: KKeiko
2017-09-25 19:17:00
https://msdn.microsoft.com/en-us/library/say26bbb.aspx
作者:
LPH66
(-6.2598534e+18f)
2017-09-25 19:18:00
一楼正解, 不过这在 C++17 将会改变, 会是预期的 2 了问题是在 << 运算子的左右两边没说谁先做
https://wandbox.org/permlink/2cRJkP2imKVDTSys
C++17
作者:
jimfan
(jimfan)
2017-09-25 22:21:00
如果你知道编译器会将 cout << a << b << c << endl; 扩张为一连串函数呼叫,就会明白原因将你的cout 简化成 cout << addOne(i) << i; 的话,大概会被编译成 <<( <<(cout, addOne(i)) , i);可见i初次被使用时,值未被addOne()变更这里还牵涉函数堆叠、以值/位址传入的概念,哗,C++很深奥
作者:
LPH66
(-6.2598534e+18f)
2017-09-25 23:47:00
其实这里有点微妙, pre-C++17 的话这是对的但 C++17 新增的规定有特别把 << >> 两个运算子拉出来规定其算子的执行顺序, 所以不能单单展成函数呼叫(即使在新规定之下普通函数呼叫其参数执行顺序依然未指定)
作者:
lovejomi
(JOMI)
2017-09-26 06:18:00
c++17自己overload有办法写出满足规定的实作吗
作者:
LPH66
(-6.2598534e+18f)
2017-09-26 08:44:00
唔嗯, 这跟你的实作相对无关, 而是在进你的函数之前计算参数的顺序问题; pre-C++17 没规定, C++17 定先左再右
继续阅读
Re: [问题] 菜鸟对跨作业系统编译的疑问
descent
[问题] 菜鸟对跨作业系统编译的疑问
joylintp
Re: [闲聊] C++ Stateful Metaprogramming
damody
[问题] Call child class function from parent
gigigigi
Re: [闲聊] C++ Stateful Metaprogramming
CoNsTaR
[问题] c++ template undefined reference
yshihyu
[问题] 新手发问 do...while 要结束时请输入0
Eric2213
[问题] 每个task有自己的stack?
zzss2003
[问题] cuda 环境设定与使用问题
hardman1110
[问题] 请问这行组语是哪个指令集?
zzss2003
Links
booklink
Contact Us: admin [ a t ] ucptt.com