自然地,這種技術能夠將任何使用<<輸出的類型轉換為字符串。對于字符串流的更多說明,參見《C++程序設計語言》21.5.3節。
“int* p”正確還是“int *p”正確?
二者都是正確的,因為二者在C和C++中都是有效的,而且意義完全一樣。就語言的定義與相關的編譯器來說,我們還可以說“int*p”或者“int * p”。
在“int* p”和“int *p”之間的選擇與正確或錯誤無關,而只關乎風格與側重點。C側重表達式;對聲明往往比可能帶來的問題考慮得更多。另一方面,C++則非常重視類型。
一個“典型的C程序員”寫成“int *p”,并且解釋說“*p表示一個什么樣的int”以強調語法,而且可能指出C(與C++)的語法來證明這種風格的正確性。是的,在語法上*被綁定到名字p上。
一個“典型的C++程序員”寫成“int* p”,并且解釋說“p是一個指向int的指針類型”以強調類型。是的,p是一個指向int的指針類型。我明確地傾向于這種側重方向,而且認為對于學好更多的高級C++這是很重要的。
嚴重的混亂(僅僅)發生在當人們試圖在一條聲明中聲明幾個指針的時候:
int* p, p1; // 也許是錯的:p1不是一個int*
把*放到名字這一邊,看來也不能有效地減少這種錯誤:
int *p, p1; // 也許是錯的?
為每一個名字寫一條聲明最大程度地解決了問題——特別是當我們初始化變量的時候。人們幾乎不會這樣寫:
int* p = &i;
int p1 = p; // 錯誤:int用一個int*初始化了
如果他們真的這么干了,編譯器也會指出。
每當事情可以有兩種方法完成,有人就會迷惑。每當事情僅僅是一個風格的問題,爭論就會沒完沒了。為每一個指針寫一條聲明,而且永遠都要初始化變量,這樣,混亂之源就消失了。更多的關于C的聲明語法的討論,參見《C++語言的設計和演變》。
對于我的代碼,哪一種布局風格(layout style)是最好的?
這種風格問題屬于個人的愛好。人們往往對布局風格的問題持有強烈的意見,不過,也許一貫性比某種特定的風格更加重要。象大多數人一樣,我花了很長的時間,來為我的偏好作出一個固定的結論。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/