我面对这个C ++考试的问题,而且我认为我知道答案,这个问题让我很困惑,我宁愿每个人都说“第二意见”......哈哈。
a)文字
"Hello, World!"
是一个C风格的字符串。它的类型是什么?b)鉴于C风格字符串的类型和类型
std::string
不同,行std::string hello("Hello,World!");
如何编译而没有错误/警告(假设<string>
标题已包括在内)?
根据我的理解,C-Style字符串是类型(a)字符数组,而std::string
是字符串类型...和(b)它编译的原因是在C ++中整个转换为字符所有这些都是通过类型字符串而不是“在代码中”在“引擎盖下”完成的。
我说错了吗?
谢谢!
答案 0 :(得分:6)
你所说的可能很接近被称为“真实”,尽管你遗漏了一些细节。 C ++中文字"Hello, World!"
的类型是const char[14]
。如你所说,这是一个字符数组,但大小是该类型的一部分。
std::string
有一个带const char*
的构造函数,并且存在从const char[14]
到const char*
的隐式转换。这两个一起处理(b)。
但是,没有涉及“铸造角色”。
答案 1 :(得分:2)
在C ++中,"Hello, World!"
的类型是14 const char
的数组,而在C中,类型是14 char
的数组。字符串的尾随空字符是数组的一部分。