char数组和字符串文字

时间:2019-10-07 13:03:21

标签: c++ arrays string pointers char

我正在阅读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?

然后如何分配不同类型的lhs和rhs ??????

建议的答案确实有助于理解如何从字符串常量“ it is language rule”初始化char s []。

但是它没有回答有关表达式“ char [5] const&”的部分问题????

const &在这个奇怪的表达中是什么意思?! const指的是什么?

是否引用了左值引用本身?“引用在定义上是常量,初始化后我们不能更改引用的值”

还是引用数组const char的元素,以便字符串文字数组不能更改????
但在这种情况下,const应该放在char之前或char之后而不是&之前????? !!!

或const指向类型char[5],在这种情况下它的重要性是什么? 通常数组不能在定义后改变大小或类型?

1 个答案:

答案 0 :(得分:0)

尽管您的问题不清楚,但我认为主要的问题是字符串文字与char数组char[]不同的想法。字符串文字不是c ++中的数据类型的字符串或char数组,而是在编译期间定义的语法结构。另一个例子是整数文字0b00000101,它代表等于5的整数,但不是整数,就像"gorm"不是字符串而是代表编译器的字符串(更确切地说是char数组) 。当声明一个char数组并使用字符串文字对其进行初始化时,就像这里一样:char s[] = "Gorm";。这告诉编译器在初始化char数组s时将字符串文字视为char数组。

我相信研究字面量的概念以及它如何在编程语言中初始化值会有所帮助。 Link to Wikipedia page on Literals