簡體   English   中英

字符串字面量和 const char[] 或 char[] 之間的區別

[英]Difference between string literal and const char[], or char[]

假設我有這個C代碼

f((char []){ "hello" });
f((const char []){ "hello" });
f("hello");

在所有三種情況下, hello被復制到函數中。 指向 char 數組第一個字符的指針被初始化為函數參數。

我知道在 C 中,字符串文字對應於char []而在 C++ 中,字符串文字對應於const char [] ,但它會創建與char []const char []相同的代碼嗎?

在 C 程序中,您能否將所有出現的"string"(char []){ "string" }交換並在匯編級別獲得相同的結果?

我不能說會生成什么代碼,但根據 C 標准(6.5.2.5 復合文字)

7 字符串文字和具有 const 限定類型的復合文字不需要指定不同的對象。

還有一個例子

13 示例6 像字符串文字一樣,const 限定的復合文字可以放入只讀存儲器中,甚至可以共享。 例如,

(const char []){"abc"} == "abc"

如果文字的存儲是共享的,則可能會產生 1。

正如您正確提到的,C 中的字符串文字具有非常量字符數組的類型。 但是,它們可能不會被修改。 另一方面,可以修改沒有限定符 const 的復合文字。 這會影響生成的匯編代碼。 或者,如果將限定符 const 與復合文字一起使用,則結果類型與相應字符串文字的類型不同。 所以這又會影響生成的匯編代碼。

另一個區別是字符串文字在任何情況下都具有靜態存儲持續時間,而復合文字可以具有自動存儲持續時間。 這也會影響生成的匯編代碼。

暫無
暫無

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

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