2013-12-09 55 views
3

我有这样的代码:C++的std :: cout和<<运算符,优先

std::cout << " a: " << classDate.getDays() << " b: " << classDate++ << " c: " << classDate.getDays(); 

我重载递增运算符。

类m_days变量值:

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

我的问题是,为什么从COUT的结果是错误的顺序:

一个:5 b:5 C:4

我检查在debuger,值I n班是正确的。当我这样写代码时:

std::cout << " a: " << classDate.getDays(); 
std::cout << " b: " << classDate++; 
std::cout << " c: " << classDate.getDays(); 

一切都正确(a:4 b:5 c:5)。

是运营商的优先级问题?

卡米尔

+0

我不确定在使用后增量时如何得到'b:5'。这是你使用的确切代码吗? –

+0

对不起,我忘了。后增加以整数形式返回新值。 – kolumb

+0

@kolumb然后你已经实现了前缀'++'并将其称为后缀。你的代码的未来维护者至少会发现这很难理解。 –

回答

1

评估的顺序是未指定的。

看看这个answer,这类结果的一个很好的解释

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 

相关问题