[C++ Error] invalid initialization of non-const reference of type 'std::__cxx11::string& {aka std::__cxx11::basi


1.代碼

#include <string>
using namespace std;

void teststr(string& str)
{
        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;

        return 0;
}

2.make 結果

 

 3.分析與解決

就拿(a + b)來說,a+b的值會存在一個臨時變量中,當把這個臨時變量傳給f時,由於testint的聲明中,參數是int&,不是常量引用,因為c++編譯器的一個關於語義的限制。如果一個參數是以非const引用傳入,c++編譯器就有理由認為程序員會在函數中修改這個值,並且這個被修改的引用在函數返回后要發揮作用。但如果你把一個臨時變量當作非const引用參數傳進來,由於臨時變量的特殊性,程序員並不能操作臨時變量,而且臨時變量隨時可能被釋放掉,所以,一般說來,修改一個臨時變量是毫無意義的,據此,c++編譯器加入了臨時變量不能作為非const引用的這個語義限制。

4.總結

c++中臨時變量不能作為非const的引用參數

5.方案

解決方法:在參數前面加一個cosnt或者把引用符號去掉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM