2016-12-17 13 views
-4

このコードはi = 35を結果として出力しますが、どういうわけかコンパイルさえしません。どうして ?C++: 'void'の無効な使用

#include <iostream> 
using namespace std; 
void increment(int &p){ 
    p = p +10; 
} 
int main() 
{ 
    int i = 10; 
    increment(i) += 15; 
    cout<<"i = " <<i<<endl; 
    return 0; 
} 
+3

をあなたがこれを行うことはできません: '増分(I)+ = 15;' – nrussell

+3

は、これは実際にコンパイルしていますか? 'increment'は' void'なので、それはどのようにして左辺値になりますか? – doctorlove

+0

'lvalue'は場所と見なすことができます。値を代入するときは、代入演算子の左辺*を位置にする必要があります。あなたの機能は場所ではありません。 –

答えて

4

いいえ、すべきではありません。 incrementは戻り値の型としてvoidを持ちます。つまり、この関数の式呼び出しに値がないことを意味します。その呼び出しを代入の左部分で使用できるようにするには、左の値を返す必要があります。

基本的に、あなたが書くときa=baはコンテナを示しますが、bの値です。

あなたが試すことができます。

int &increment(int &p){ 
    p = p +10; 
    return p; // return the reference passed as argument... 
} 
int main() 
{ 
    int i = 10; 
    increment(i) += 15; 
    cout<<"i = " <<i<<endl; 
    return 0; 
} 
関連する問題