最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何理解C++ 臨時變量的常量性

 更新時間:2020年08月24日 09:54:13   作者:Dabelv  
這篇文章主要介紹了如何理解C++ 臨時變量的常量性,幫助大家更好的理解和學(xué)習(xí)c++ 變量,感興趣的朋友可以了解下

1.認(rèn)識臨時變量的常量性

關(guān)于臨時變量的常量性,先看一段代碼。

void print(string& str)
{
	cout<<str<<endl;
}
//如此調(diào)用會報編譯錯誤
print("hello world");

在Linux環(huán)境使用g++編譯,會出現(xiàn): invalid initialization of non-const reference of type ‘std::string&' from a temporary of type 'std::string'的錯誤。其中文意思為臨時變量無法為非const引用初始化。出錯的原因是編譯器根據(jù)字符串"hello world"構(gòu)造一個string類型的臨時對象,這個臨時變量具有const屬性,當(dāng)這個臨時變量傳遞給非const的string&引用類型時,無法隱式完成const到非const的類型轉(zhuǎn)換,便出現(xiàn)上面的編譯錯誤。解決辦法是將print()函數(shù)的參數(shù)改為常引用。代碼修改如下,可順利通過編譯。

void print(const string& str)
{
	cout<<str<<endl;
}
//順利通過編譯
print("hello world");

通過以上代碼,可以看出在設(shè)計函數(shù)時,形參盡可能地使用const,這樣可以使代碼更為健壯,將錯誤暴露于編譯階段。

2.臨時變量常量性的原因

為什么臨時對象作為引用參數(shù)傳遞時,形參必須是常量引用呢?很多人對此的解釋是臨時變量是常量,不允許賦值改動,所以作為非常量引用傳遞時,編譯器就會報錯。這個解釋在理解臨時變量不能作為非const引用參數(shù)這個問題上是可以的,但不夠準(zhǔn)確。事實上,臨時變量是可以作為左值(Lvalue) 并被賦值的,請看下面的代碼:

class IntClass
{
private:
	int x;
public:
	IntClass(int value):x(value){}
	friend ostream& operator<<(ostream &os, const IntClass &intc);
};

//重載operator<<
ostream& operator<<(ostream &os, const IntClass &intc)
{
	os<<intc.x;
	return os;
}

int main(int argc,char* argv[])
{
	cout << (IntClass(6) = IntClass(8))<<endl;
}

程序輸出:

8

以上代碼正確編譯運(yùn)行,沒有錯誤。IntClass(6)表示生成一個無名臨時變量并作為左值被修改,所以臨時變量并不是常量,只是編譯器從語義層面限制了臨時變量傳遞給非const引用。注意,這里與《C++編程思想》在第八章中的“臨時量”小節(jié)中認(rèn)為“編譯器使所有的臨時量自動設(shè)為const”的說法有些不同。

那編譯器為何作出如此限制呢?如果一個實參以非const引用傳入函數(shù),編譯器有理由認(rèn)為該實參會在函數(shù)中被修改,并且這個被修改的引用在函數(shù)返回后要發(fā)揮作用。但如果把一個臨時變量當(dāng)作非const引用參數(shù)傳進(jìn)來,由于臨時變量的特殊性,臨時變量所在的表達(dá)式執(zhí)行結(jié)束后,臨時變量就會被釋放,所以,一般說來, 修改一個臨時變量是毫無意義的,據(jù)此,C++編譯器加入了臨時變量不能作為非const引用實參這個語義限制,意在限制這個非常規(guī)用法的潛在錯誤。

以上就是如何理解C++ 臨時變量的常量性的詳細(xì)內(nèi)容,更多關(guān)于C++ 臨時變量的常量性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++基礎(chǔ)知識實例解析(一)

    C++基礎(chǔ)知識實例解析(一)

    這篇文章主要對C++基礎(chǔ)知識實例解析,通過四個簡短的案例,鞏固大家的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • QT實現(xiàn)五子棋游戲

    QT實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了QT實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • jquery ready函數(shù)深入分析

    jquery ready函數(shù)深入分析

    本文主要介紹jquery ready,這里整理了相關(guān)資料及相關(guān)示例代碼幫助大家學(xué)習(xí)參考,有興趣的小伙伴可以參考下
    2016-08-08
  • C語言控制語句之 循環(huán)

    C語言控制語句之 循環(huán)

    C語言循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結(jié)構(gòu),今天通過本文給大家分享C控制語句的相關(guān)知識,需要的朋友參考下吧
    2021-07-07
  • C語言求兩個字符串的最長公共子串

    C語言求兩個字符串的最長公共子串

    這篇文章主要介紹了C語言求兩個字符串的最長公共子串,實例分析了C語言操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法

    C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法

    本文主要介紹了C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    這篇文章主要詳細(xì)介紹了C++實現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實用,有需要的小伙伴可以參考下
    2015-03-03
  • C語言實現(xiàn)簡易通訊錄實例

    C語言實現(xiàn)簡易通訊錄實例

    大家好,本篇文章主要講的是C語言實現(xiàn)簡易通訊錄實例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 封裝常用正則表達(dá)式的用法

    封裝常用正則表達(dá)式的用法

    這篇文章主要介紹了使用C++封裝常用正則表達(dá)式的用法,方便以后直接使用,最后還給出了測試代碼,大家可運(yùn)行測試使用
    2014-03-03
  • C語言完全平方整數(shù)的判斷

    C語言完全平方整數(shù)的判斷

    大家好,本篇文章主要講的是C語言完全平方整數(shù)的判斷,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論

乡宁县| 林甸县| 马关县| 信丰县| 石阡县| 全州县| 榆林市| 绵竹市| 淮阳县| 丽水市| 南陵县| 紫云| 唐山市| 广宗县| 耒阳市| 富宁县| 磴口县| 双江| 双峰县| 安泽县| 石城县| 琼结县| 鲜城| 湖南省| 诸暨市| 峨山| 旅游| 彩票| 崇义县| 隆安县| 静安区| 禹城市| 珠海市| 诸暨市| 天气| 社会| 正安县| 莎车县| 息烽县| 阜南县| 怀柔区|