甜鹹之爭
經常寫C++的基本上避不開使用指標,而且C++中指標型別的寫法大體上有兩種:
int* a = nullptr; //*靠前
int *b = nullptr; //*靠後
都是宣告一個指標。
關於哪種寫法的傾向性,每個人都不太一樣,有的往前放,有的往後放,還有的?愛放哪放哪,你管得著嘛。
《C++ Primer》中推薦靠後,原因是:
int *a,b,c; // a是指標,b和c都不是
int* a,b,c; // 一樣,但容易引起誤會,讓人誤以為b和c是指標,實則不然
不過用Visual Studio寫C++的時候,格式化方式又有所不同,當你敲完int*a=nullptr;
後會靠前,會變成int* a=nullptr;
,其原因可能是隔壁的C#只允許往前放的寫法:
//C#程式碼
unsafe ...
{
int* a,b,c; // a,b,c都是指標
int *a,*b,*c; // 錯誤!不讓這麼寫。
}
我倒是不關心C#怎麼寫,但是在C++的語境下,我贊同《C++ Primer》的觀點,喜歡往後放,但是VS就像個傲嬌一樣,分號一敲完就把我剛寫好的int *a
變成了int* a
。
難道甜和鹹就不共戴天了麼??
當然不是,對於C++程式碼,VS預設狀態下使用的是Clang-Format方案。
Clang-Format將這個問題稱為指標對齊,使用PointerAlignment
設定,其實聽說Clang預設是Right
的。不過在Clang-Format配置檔案中VS預設將PointerAlignment
置為Left
。
當然,我們倒沒必要把VS的Clang-Format配置檔案拎出來暴打一頓塞回去,VS其實允許我們手動設定這個風格,步驟如下:
選單欄→工具→選項
,開啟選項視窗- 左側搜尋“格式”然後找到箭頭所指的項(或者在左側直接按樹找
文字編輯器→C/C++
) - 依次往下找,
程式碼樣式→格式設定→間距
,然後在右側找運算子的間距→指標/引用對齊方式
下面有四個選項,你就可以設定成你prefer的方式,然後在下面看預覽效果觀察*
和&
的位置,確定就好了
這樣,VS就不會執拗地把*
往前放了。
類似地,關於其他運算子的設定方法也可以在這個上下文中進行,因此這個位置值得記錄一下,畢竟恰當設定可以提升開發效率,這個設定的位置又比較隱蔽容易迷路,所以特此記錄一下。