![](/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.