什么类型的“C风格字符串”以及它与std :: string的关系

时间:2012-02-28 11:01:09

标签: c++

我面对这个C ++考试的问题,而且我认为我知道答案,这个问题让我很困惑,我宁愿每个人都说“第二意见”......哈哈。

  

a)文字"Hello, World!"是一个C风格的字符串。它的类型是什么?

     

b)鉴于C风格字符串的类型和类型std::string不同,行std::string hello("Hello,World!");如何编译而没有错误/警告(假设<string>标题已包括在内)?

根据我的理解,C-Style字符串是类型(a)字符数组,而std::string是字符串类型...和(b)它编译的原因是在C ++中整个转换为字符所有这些都是通过类型字符串而不是“在代码中”在“引擎盖下”完成的。

我说错了吗?

谢谢!

2 个答案:

答案 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的数组。字符串的尾随空字符是数组的一部分。