簡體   English   中英

帶有const參數的C ++構造函數

[英]C++ constructor with a const argument

我只是想知道將構造函數與const char* cchar* const c作為參數之間的區別是什么? 如果我在頭文件和源文件中交換char*const這不是問題,但是當我混合它們時它將無法編譯,說沒有這樣的重載構造函數。

當我使用自己的類作為復制構造函數時,如果我有MyClass const &otherconst 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指針。”

  1. char *const裝置指針本身const (不能被修改),但炭(多個)它 可以被修改指向。
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM