![](/img/trans.png)
[英]What is the difference between const char * and literal string?
[英]what is difference in type between array of char and string literal
我正在閱讀 c++ 編程語言書,並且正在學習指向 char 的指針,
我發現這個代碼char s[] = "Gorm";
這提醒我字符串文字被隱式轉換為 const char *。
所以我對 lhs 和 rhs 不是同一類型感到困惑。
我在這里使用了在線編譯器和代碼: Is it possible to print a variable's type in standard C++?
了解編譯器如何查看 lhs 和 rhs 的類型,
然后我發現 lhs 被視為char[5]
而 rhs 被視為char[5] const &
我可以解釋 lhs,
但我不明白什么是“對 5 個字符數組的常量左值引用”或
即使在將 lhs char s[]
隱式轉換為char* s
之后,
什么是“對指向非 const char 的非 const 指針的常量左值引用”?
不是定義常量的左值引用“它僅指初始化它的值”???
那么為什么我們在“&”之前需要 const ???
然后怎么分配不同類型的lhs和rhs??????
建議的答案對於理解如何從字符串文字“它是語言規則”初始化 char s[] 非常有幫助。
但它沒有回答關於表達式“char [5] const &”的部分問題???
這個奇怪的表達式中的const &
是什么意思?!!!
const
指的是什么???
它是指左值引用本身嗎???“根據定義,引用是 const,我們不能在初始化后更改引用的值”???
或者它是指數組const char
的元素,這樣字符串文字數組就不能改變????
但在這種情況下const
應該放在char
之前或char
之后而不是&
?????!!!
或 const 指的是char[5]
類型,在這種情況下,它的重要性是什么????
通常數組在定義后不能改變大小或類型????
盡管您的問題尚不清楚,但我認為主要問題是字符串文字與字符數組char[]
的類型不同的想法。 字符串文字不是 c++ 中的數據類型的字符串或字符數組,而是在編譯期間定義的語法結構。 Another example would be a integer literal 0b00000101
this represents an integer equal to 5 but is not an integer, just like "gorm"
is not a string but represents a string (more accurately a char array) to the compiler. 當聲明一個 char 數組並使用字符串文字初始化它時,就像你在這里做的那樣: char s[] = "Gorm";
. 這告訴編譯器在初始化 char 數組 s 時將字符串文字視為 char 數組。
我相信研究文字的概念以及它如何幫助在編程語言中初始化值會有所幫助。 鏈接到 Literals 上的 Wikipedia 頁面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.