C 新標準 侯捷(三) 標準庫

2021-09-10 17:56:49 字數 912 閱讀 7167

之所以放在標準庫,是因為它雖是語言的部分,但接下來的東西都與標準庫有關。

可以幫忙解決不必要的copy。

當賦值右邊是乙個右值時,左邊的物件可以偷右邊物件的資源。

lvalue :可以出現於operator=左側者;

rvalue:只能出現於operator=右側者。

我們試驗發現,整數中a+b=42是不可以的,而字串中s1+s2=s2,複數中c1+c2=cpmplex(4,9)卻可以。

int foo()

...int x=foo(); //ok

int *p = &foo(); //[error]右邊是取函式返回值得位址,但返回值是個右值

foo() = 7; //[error]

所以必須有語法讓我們在呼叫端告訴編譯器「這是個右值」。在被呼叫端

c.insert(ite,vtype(buf));//臨時物件,告訴你用右值。

m c2(std::move(c1));//通過move來告訴你用右值。

不完美的傳遞:右值經過forward()傳給另乙個函式後就變成了左值。

當然,標準庫中解決了,不過比較複雜比較底層,因此不在這裡具體**。用標準庫的就可以完美傳遞,比如std::forward();

big-three:拷貝構造,拷貝賦值,析構函式。

拷貝建構函式通常伴隨著記憶體操作,因此需要丟擲異常,而移動建構函式往往是移動記憶體所有權,因此不需要丟擲異常,所以宣告為noexcept。

str._data=null;       //重要,不然的話臨時物件生命結束時會把資料部分一起delete。

C 新標準 侯捷(二) 語言(中)

可以讓編譯器找出乙個表示式的型別,相當於typeof特性。mapcoll decltype coll value type elem map value type elem 1.用來宣告返回型別,比如 templatedecltype x y add t1 x,t2 y 因為這時還沒讀入x,y所以改...

侯捷 C 標準11 14

本篇記錄學習 侯捷 c 標準11 14 一 演進 環境與資源 1 c 2.0的新特性,包括語言的部分和標準庫的部分。tr1是2003年的版本,即c 1.0。二 variadic templates 1 數量不定的模板引數,引數個數和引數型別都未定。三 spaces in template expre...

this指標 新標準c 程式設計

背景 c 是在c語言的基礎上發展而來的,第乙個c 的編譯器實際上是將c 程式翻譯成c語言程式,然後再用c語言編譯器進行編譯。c語言沒有類的概念,只有結構,函式都是全域性函式,沒有成員函式。翻譯時,將class翻譯成struct 物件翻譯成結構變數是顯而易見的,但是對類的成員函式應該如何翻譯?對 my...