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变量中有值:
我的问题是,为什么来自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).
这是运营商的优先问题吗?
卡米尔
在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语句中,如第二个示例所示.