C++ g++;和操作员<&书信电报;在评估过程中更改值时会产生意外结果
下面是一些简单的代码C++ g++;和操作员<&书信电报;在评估过程中更改值时会产生意外结果,c++,g++,clang++,C++,G++,Clang++,下面是一些简单的代码 #include <iostream> using namespace std; bool func(char* m) { *m = '4'; return true; } using namespace std; int main() { char c1 = '3'; cout << "a" << c1 << func(&c1) << c1 << "b"
#include <iostream>
using namespace std;
bool func(char* m)
{
*m = '4';
return true;
}
using namespace std;
int main()
{
char c1 = '3';
cout << "a" << c1 << func(&c1) << c1 << "b" << endl;
return 0;
}
#包括
使用名称空间std;
布尔函数(字符*m)
{
*m='4';
返回true;
}
使用名称空间std;
int main()
{
字符c1='3';
cout是,未指定func(&c1)
和两个c1
的求值顺序
这意味着可以按任何顺序计算这三个表达式,从而产生以下任何输出:
a313b
a314b
a413b
a414b
请参见我们将把您的示例缩短一点,让我们来了解一下代码:
char func(char* m) { *m = '4'; return *m; }
int main() {
char c = '1';
cout << c << func(&c);
}
或
可能重复的不是重复的。有很多序列点。通常最好不要混合计算和输出。计算所有需要的值,然后生成输出。@Boperson或在不同的语句中输出不同的值。从技术上讲,这不是未定义的吗?
operator<<(operator<<(cout, c), func(&c))
`14`
`44`