[英]C++ constructor with a const argument
我只是想知道將構造函數與const char* c
或char* const c
作為參數之間的區別是什么? 如果我在頭文件和源文件中交換char*
和const
這不是問題,但是當我混合它們時它將無法編譯,說沒有這樣的重載構造函數。
當我使用自己的類作為復制構造函數時,如果我有MyClass const &other
和const MyClass &other
mixed,編譯器似乎不會打擾。
請問有人可以開導我嗎? :)
此記錄const char *c
聲明指向c的類型為const char
的對象。 即使用此指針,您可能無法更改指針所引用的對象。
此記錄char * const c
聲明const
指針c,指向char
類型的非const對象。 您可能無法更改指針本身,但您可以更改指針所引用的對象。
聲明指針和引用之間存在差異。 雖然術語“常量引用”嚴格來說,引用本身可能不是一成不變的。 根據C ++語法
ptr-operator:
* attribute-specifier-seqopt cv-qualifier-seq
& attribute-specifier-seqopt
引用不包含cv-qualifier-seq。 所以例如這個記錄
Airplane & const other
將是不正確的,編譯器將發出錯誤。 至於這些記錄
const Airplane & other
Airplane const & other
然后它們與下面的recirds相同
const char *c
char const *c
將*
視為“圍欄”。 什么是之前的聲明定義指針指的類型。 *
之后的內容定義了指針本身。 對於這種情況,最容易向后讀取事物(將*
轉換為“指向”),因此char const *t
被讀取(從后到前):“t是指向const char的指針”。 同樣, char *const t
讀作:“t是指向char的const指針。”
char *const
裝置指針本身是const
(不能被修改),但炭(多個)它在 可以被修改指向。 char const *
或const char *
彼此相同。 兩者都意味着指針本身可以被修改,但它指向的不能。 用不同類型代替char
並不會改變這個基本思想。
引用也是如此: const T &
表示對const T
的引用,因此您無法修改它引用的T
在引用的情況下,您不能修改引用本身以引用不同的對象,因此T & const
沒有任何實際意義(並且不允許)。
const
適用於其左側的類型(如果左側沒有任何內容,則適用於其右側),因此const char *
和char const *
相同並且意味着字符不能更改,但指針可以,而char * const
表示字符可以更改,但指針不能
寫入const和char *的順序實際上有所不同。 如果你的頭文件中有const char*
但源文件中有char* const
,則會出現錯誤,因為編譯器不會將它們視為相同。
const char* p
表示p指向一個常量的char。 我們可以改變p指向的位置,但我們永遠不能改變存儲在p的內容。
char* const p
表示p是一個常量指針,指向一個char。 我們可以改變存儲在p的內容,但是我們不能改變p指向的位置。
const char* const p
表示p是指向常量char的常量指針。 我們不能改變p指向的位置,也不能改變p處的內容。 希望這有用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.