C++ std :: cout和<<运算符,优先级

kol*_*umb 3 c++ cout operator-keyword

我有这样的代码:

std::cout << " a: " << classDate.getDays() << " b: " << classDate++ << " c: " << classDate.getDays();
Run Code Online (Sandbox Code Playgroud)

我重载了后增量运算符.

在类m_days变量中有值:

  • 在++运算符之前 - 4
  • 在++ oprator -5之后

我的问题是,为什么来自cout的结果是错误的顺序:

a:5 b:5 c:4

我在debuger中检查过它,课堂上的值是正确的.当我写这样的代码时:

std::cout << " a: " << classDate.getDays();
std::cout << " b: " << classDate++;
std::cout << " c: " << classDate.getDays();
Run Code Online (Sandbox Code Playgroud)

一切都是正确的(a:4 b:5 c:5).

这是运营商的优先问题吗?

卡米尔

Dav*_*own 6

在C++中的函数参数评估顺序(和重载operator<<这里使用仅仅是一个函数)是未定义因此编译器可以自由地评估classDate++以及每个classDate.getDays()在它选择的任何顺序.因此,使用不同的编译器或不同的编译选项,您可以获得任何

a: 4 b: 5 c: 4
a: 4 b: 5 c: 5
a: 5 b: 5 c: 4
a: 5 b: 5 c: 5
Run Code Online (Sandbox Code Playgroud)

如果您希望按特定顺序对它们进行求值,则应将输出放在septate语句中,如第二个示例所示.