int * getInt2(int a[]) {
(*a) *= 2;
return a;
}
int main(int argc,char *argv[])
{
int intInit = 1;
int * (*intPtr)(int *) = getInt2;
cout << intInit++ << ":" << intInit << endl;
cout << intPtr(&intInit) << ":" << intInit<<endl;
cout << intInit << endl;
cout << *intPtr(&intInit) << endl;
cout << (*intPtr)(&intInit) << ":" << *(*intPtr)(&intInit) << endl;
cout << intInit << endl;
}
运行时的真实结果:
1:2
012FFABC:2
4
8
012FFABC:16
32
但我希望它是:
1:2
012FFABC:4
4
8
012FFABC:32
32
我是不是误会了什么?是不是有什么延迟的原因?感谢您提供任何线索。
我看到有人认为在c++中表达式行为是未定义的,焦点总是在自增操作上,所以我添加一个例子:
int addTarget(int &n) {
n += 1;
return n;
}
int multiplyTarget(int &n) {
n *= 2;
return n;
}
int main(int argc,char *argv[])
{
int intTest = 1;
cout << multiplyTarget(intTest) << ":" << addTarget(intTest) << endl;
cout << addTarget(intTest) << ":" << multiplyTarget(intTest) << endl;
}
以上代码的结果是:
4:2
9:8
我看到有人说输出顺序是从左到右,操作顺序是从右到我。这可以解释大多数情况。但我认为第一个例子的第一个输出应该是1:1而不是1:2根据这个理论。我真的很想知道这个理论。
最佳答案
在 C++17 之前,
std::cout << intInit++ << ":" << intInit << endl;
intInit
的增量不必在下一个 <<
之前发生
所以都是
std::cout << intInit << ":" << intInit << endl; intInit++;
或
std::cout << intInit;
intInit++;
std::cout << ":" << intInit << endl; intInit++;
有效。
在 C++17 中,intInit++
的完整副作用应该在 std::cout << ":" << intInit << endl
之前发生.
关于c++ - cout变量值延时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55726726/