c++ - cout变量值延时

标签 c++ pointers delay cout

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/

相关文章:

jquery - 延迟悬停法

c++ - 交换技巧,STL

pointers - 为什么 Go 标准库更喜欢指针接收器?

javascript - 布局阶段完成后显示 HTML 内容

c++ - 如何处理指针成员的不同所有权策略?

C++ vector 、指针等

javascript - 延迟子菜单

c++ - 基类不应该有成员复制?

c++ - 我可以安全地 memset 一个具有用户定义构造函数的重要 C++ 结构吗?

c++ - C++ 中的模板类和包含守卫