2 回答

TA貢獻1862條經驗 獲得超7個贊
相對于&,從右到左讀取const 沒什么區別,因此它們都表示對不變的Fred實例的引用。
Fred& const這將意味著引用本身是不可變的,這是多余的;當處理const指針時, Fred const*和和Fred* const都有效,但有所不同。
這是一個樣式問題,但是我更喜歡將其const用作后綴,因為它可以被一致地應用,包括const成員函數。

TA貢獻1856條經驗 獲得超17個贊
行為
const T&
和之間沒有語義差異T const&
;語言將它們視為相同類型。(同樣的道理也適用于const T*
和T const*
。)
作為風格問題
但是,關于在造型上您更喜歡哪個,我將拒絕其他許多答案,并且更喜歡const T&
(和const T*
):
const T&
是Stroustrup的《 C ++編程語言》一書中使用的樣式。const T&
是C ++標準本身使用的樣式。const T*
是K&R的《 C編程語言》一書中使用的樣式。const T*
是C標準中使用的樣式。由于上述因素,我認為
const T&
/const T*
具有比T const&
/ 更多的慣性T const*
。const T&
/從const T*
經驗上看,對我來說比T const&
/T const*
在我所見過的所有C ++和C代碼中更常見。我認為遵循常規做法比從原則上遵循從右到左的解析規則更具可讀性。使用
T const*
,將*
as 放錯地方似乎更容易T* const
(尤其是如果人們不習慣它)。相反,const* T
不是合法的語法。
從右到左的解析規則呢?
關于人們似乎喜歡使用的從右到左的整個解析論點:正如我在另一個答案的評論中提到的,const T&
從右到左也不錯。它是對T常數的引用?!?T”和“ constant”都可以用作形容詞或名詞。(此外,讀取T const*
從右到左可以是不明確的,因為它可能被錯誤地解釋為“指針常數到 T”,而不是稱為“指針以恒定T”)。

TA貢獻1810條經驗 獲得超5個贊
引用的工作方式與指針不同:對于指針,您可以使用“常量指針”(type * const p
)和“指向常量的指針”(const type * p
或type const * p
)。
但是您沒有參考資料:參考資料始終會引用同一對象;從這種意義上講,您可以認為“引用”是“常量引用”(使用“常量指針”的方式相同)。
因此,“ type&const ref”之類的內容不合法。您只能具有“對類型的引用”(type &ref
)和“對常量類型的引用”(const type &ref
或type const &ref
;兩者完全相同)。
最后一件事:即使用const type
英語聽起來聽起來更正確,但編寫仍type const
可以使系統更系統地理解“從右到左”的聲明:int const & ref
可以讀取“ ref是對常量int的引用”。或更復雜的示例:int const * const & ref
,ref是指向常量int的常量指針的引用。
結論:在您的問題上,兩者是完全相同的。
- 2 回答
- 0 關注
- 512 瀏覽
添加回答
舉報