Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;和操作员<&书信电报;在评估过程中更改值时会产生意外结果_C++_G++_Clang++ - Fatal编程技术网

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`