我知道題主的問題是啥,不過似乎很多人都沒看懂題主想表達什麽。
題主想表達的意思是:
int
*
p
=&
a
;
跟
*
p
=&
a
;
具有完全不同的語意,前者先計算賦值再計算星號,後者則是先計算星號再計算賦值。語意與運算子優先級都不同,在可讀性方面存在很大影響。
因此,這顯然是 C/C++ 當初設計上的不足。
不過,為什麽會存在這個現象呢?
因為 C 語言當初設計的時候,是不建議在定義變量的時候賦值的 。
因為 C 語言當初並不是打算讓你在定義變量的時候同時賦值,所以 C 語言最初設計為只能在檔頭,函數頭,區塊頭定義變量。變量僅僅只是定義,而賦值則是發生在程式邏輯實際發生的時候。
但是隨著時代的發展,人們逐漸覺得在定義的時候賦值,將定義推遲到賦值的時候,才是更好的編程實踐,C++作者就非常推崇這個。而這個時候,為了相容 C ,已經沒法再解決這個問題了。
不過現在,問題得到了解決,那就是 C++11 引入的 auto 。
實際上前置類別語言的這類設定是:如果你需要賦初值,那麽就不要聲明類別,讓語言自動推導;如果你聲明類別,就不要賦初值,否則語意上容易沖突,影響可讀性。
如此一來,就不會存在題主曾經有的「初始化語句與賦值語句語意與運算子優先級不一致」的問題了。