C 有哪些反常規知識點?

時間 2021-05-31 04:49:35

1樓:

T &&(以及對應的auto &&)在進行模板引數推導(template argument deduction)時:

如果是在過載決議(overload resolution)中匹配乙個函式模板,作為該函式模板的引數型別,那麼會被看成是universal reference.

如果出現在其它地方,即使也是作為乙個模板函式型別的引數型別,那仍然會被看成是rvalue reference.

所以這就導致了如下看上去反常的結果出現:

[Wandbox]三へ( へ )へ

2樓:暮無井見鈴

說到「反常規」的話,我覺得或許是這點:

C++ 的初始化和賦值可以說是截然不同的。(其他語言似乎都沒 C++ 那麼大區別)

可以說語法上二者只在可平凡複製 (trivially copyable) 類的相關要求,和隱式 =delete 的成員函式這裡有些關聯。

另外預設初始化不等於零初始化,不等於無操作。預設初始化本身都可以被禁止。從而欲實現泛型的變長動態陣列(即類似 vector 的容器), new T[n]; 這種寫法是不適合的。

3樓:d41d8c

0xA+1是合法的,0xE+1是不合法的。

class A {}; class B : A {}; class C : B ;是不合法的,正確做法是把A* pa;改成::A* pa;。

4樓:Anqur

`explicit` 關鍵字, 防止在使用 copy assignment operator 時發生不必要的隱式轉換, 比如 `my_string a = 'a'` 時字元 'a' 意外被傳入至建構函式 `my_string(int a)`. 貌似還有更多關於這個的坑.

5樓:

瀉藥。首先,題主給的例子貌似很正常啊,標頭檔案用引號是先在當前目錄中搜尋有沒有這個標頭檔案,如果沒有,再去類庫找。而尖括號是直接去類庫找。所以邏輯上確實沒問題。

如果說到反常規,學過編譯原理的人可能知道下面這個好玩的東西。

int a[3] = ;

std::cout << 1[a] ; //輸出的是a[1]std::cout << 2[a] ; //輸出的是a[2]貌似就是運用到了 *(a+1) 等價於 *(1+a) 這個神奇的加法交換律,不過只能用在基本資料型別上,類的話即使過載運算子也沒有這個現象。(逃

c 11有哪些大知識點?

摘自Standard C C 11 C 11 Overview C 11 Language Extensions General Features C 11 Language Extensions Classes C 11 Language Extensions Other Types C 11 L...

《覺醒年代》中有哪些知識點?

劉嗶電影 新文化運動和五四運動這段歷史我們以前在影視劇裡邊很少能夠看到著重描寫的。歷史課本上,陳獨秀,李大釗,魯迅他們的名字和著作連在一起。透過文字的背後,我們得到的通常是選擇題和閱讀理解的答案。很少有人告訴我們那段歷史的洪流是多麼的湍急那段歷史的浪潮是多麼的洶湧。看著破敗不堪的祖國,各界有識之士都...

SAT語法有哪些易考的知識點?

SATPEDIA SAT語法雖然頂著 語法 的帽子,但考察內容與我們大部分人未接觸這門考時的理解會有一定的偏差,因此有很多同行把它改稱為 文法 也是不無道理的。1 Expression of Ideas 語義表達 2 Standard English Convention 標準英語使用規則 Expr...