[C ++エラー]タイプ 'std :: __ cxx11 :: string&{aka std :: __ cxx11 :: basiの非const参照の初期化が無効です

1.コード

#include < string >
 using  namespace std; 

void teststr(stringstr)
{ 
        cout << str << endl; 
} 

void testint(int&a 
{ 
        cout << a << endl; 
} 

int main()
{ 
        string str = " Hello World " ; 
        teststr(str.substr(2 )); 

        int a = 1、b = 2 ; 
        cout << testint(a + b)<<endl; 

        0を返し ます
}

2.結果を作る

 

 3.分析と解決策

(a + b)を例にとると、a + bの値は一時変数に存在します。この一時変数をfに渡すと、testint宣言のため、パラメーターはint&であり、定数参照ではありません。意味上の制限の。パラメーターが非const参照として渡される場合、C ++コンパイラーは、プログラマーが関数の値を変更し、変更された参照が関数から戻った後に役割を果たすと考える理由があります。ただし、一時変数を非const参照パラメーターとして渡すと、一時変数の特殊な性質により、プログラマーは一時変数を操作できず、一時変数はいつでも解放される可能性があるため、一般的には一時変数を変更しますこれによると、C ++コンパイラーは、一時変数を非const参照として使用できないという意味の制限を追加しました。

4.まとめ

C ++一時変数は非const参照パラメーターとして使用できません

5.計画

解決策:パラメータの前にcosntを追加するか、参照シンボルを削除してください

おすすめ

転載: www.cnblogs.com/stonemjl/p/12704757.html