2013-09-28 56 views
1

下面的代码给这个错误:错误:左值要求作为递增操作数

int main() 
{ 
    int i = 4, j=10; 
    int k, l; 

    k = ++ (++ i); 
    l = (j++) ++; 

    cout << "k : " << k << endl; 
    cout << "l : " << l << endl; 

    return 0; 
} 

这将是非常有益的,如果有人可以解释为什么会发生错误。

+0

我看到大学赛季又开始了。两行都是**未定义的行为**。但是既然你不会在现实生活中编写这样的代码,为什么为什么要问。不要这样写代码。 –

+0

@Loki One只是不合格。另一个总是习惯于未定义的行为,但我不确定它现在是什么;规则在C++ 11中改变了。我同意,但不应该这样做。 –

回答

2

因为当你编写X ++时,X必须是一个变量,X必须是你正在增加的东西。所以(j++) ++是一个错误,因为(j++)不是一个变量。改为写j += 2

请注意有经验的程序员,我知道这是一个非常简单的过程。

+0

你的文章间接地说'(++ i)'是一个变量 – P0W

+0

@ P0W怎么样?我只提到j ++而不是++ i。 – john

+0

@john因为'(++ i)++'不是一个错误,所以你提出这个可能的唯一方法就是如果'++ i'是一个变量。 –

5

j++的结果是j的旧值,而不是对j的引用。您不能对其应用另一个增量,因为您无法增加值。

+1

(而'++ i'增加'i'并且返回一个对变量本身的引用,所以你可以再次增加它,但是在同一个事物上使用多个增量操作符可能会导致问题;最好不要这样做) –

+1

只适用于标量类型。如果你编写你自己的类并重载'operator ++(int)','(j ++)++;'可以是合法的。 – jrok

2

只要写j + = 2。为什么你以错误的方式使用operator ++? 套用KISS。

相关问题