簡體   English   中英

為什么不能在 C++ 中有一個非常量 char*?

[英]Why can't you have a non-const char* in C++?

為什么這樣做:

char foo[6] = "shock";`

雖然這不起作用:

char* bar = "shock"; //error

為什么bar必須是constfoo不是? Arrays in C 衰減為指針,所以foobar在技術上不具有相同的類型嗎?

文字保存在 memory 的保留區域中,不應被代碼更改。 更改存儲該文字的地址處的值意味着每次任何其他代碼嘗試使用該文字時,它都會在該 memory 中找到錯誤的值。因此修改該 memory 是非法的,因此將其視為非法不恆定。

資源

有了這個聲明:

char foo[6] = "shock";

變量foochar 類型數組,它包含 6 個非常量字符。 字符串文字包含 const 字符,這些字符在初始化時被復制到數組中。

有了這個聲明:

char* bar = "shock"; //error

變量bar指向 char 的類型指針 您試圖讓它指向"shock"的地址,這是一個包含const char的字符串文字。

您不能在const char 處指向非常量 char 的指針

所以你必須這樣做:

const char* bar = "shock";`

因為“shock”是一個常數,所以指向它的指針必須是 const

由於歷史原因 C 允許這樣做(並導致許多導致 SO 發布的錯誤)

char* bar = "shock";

大致相當於

const char anonymousArray[6] = "shock";
char *bar = anonymousArray;

Arrays 衰減為指針。 這與實際上是指針不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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