c++17的注解


c++17的注解

C++17提供了三個注解,分別是[[fallthrough]], [[nodiscard]]和[[maybe_unused]]

1.[[fallthrough]]

用於switch-case中,在某個case分支執行完畢之后,如果沒有break語句,則編譯器可能會給出一個警告。但是有時這是開發者有意為之,為了讓編譯器明確知道開發者的意圖,可以在需要某個case分支貫穿的地方(上個case沒有break語句)顯式的設置[[fallthrough]]標記。示例如下:

switch (type)
{
case 1:
	func1();
	// 這個位置缺少break語句,且沒有fallthrough標注,可能是一個邏輯錯誤,在編譯時編譯器可能會給出警告,以提醒修改
case 2:
	func2();
	// 這個位置缺少break語句,且有fallthrough標注,是開發者有意為之,在編譯時編譯器不會給出任何警告
case 3:
	func3();
}

2.[[nodiscard]]

一般用於修飾函數,告訴函數調用者必須關注函數的返回值(即不能丟棄該函數的返回值)。如果函數的調用者未將該函數的返回值賦值給一個變量,則編譯器給出一個警告。

3.[[unused]]

在通常的情況下,編譯器回懟程序代碼中未使用的函數或者變量給出警告,另一些編譯器直接不允許通過編譯。在C++17之前,為了消除這些未使用的變量帶來的編譯告警或者錯誤,要么修改編譯器的告警選項設置,要么定義一個類似於UNREFERENCED_PARAMETER的宏來顯式調用這些未使用的變量一次,來消除警告或者錯誤:

#define UNREFERENCED_PARAMETER(x) x
int add (int a, int b, int c) 
{
    UNREFERENCED_PARAMETER(a);
    UNREFERENCED_PARAMETER(b);
    // 無關代碼省略
}

但是在C++17中,直接使用注解的方式

int add ([[maybe_unused]]int a, [[maybe_unused]]int b, int c) 
{
    // 無關代碼省略
}


免責聲明!

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



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