【发布时间】:2014-11-01 23:25:17
【问题描述】:
我有以下声明
char c[] = "Hello";
string c2 = "Hello";
我想比较 a) 需要多少字节的内存和 b) 字符长度。 我知道字符数组在字符串的末尾添加了一个空终止符,而字符串数据类型则没有。
使用
cout << "The sizeof of c: " << sizeof(c);
cout << "The sizeof of c2: " << sizeof(c2);
返回 6 和 4,我不确定为什么是 4 而不是 5? 还有长度函数在这里如何比较...
当我使用以下代码时
cout << "The sizeof of c: " << sizeof(c);
cout <<"The sizeof of c2: " << c2.length();
我得到 6 和 5 ...但它是否以相同的方式比较长度? 谢谢。
【问题讨论】:
-
sizeof(c2) == 4??真的吗?c2的真实类型是什么?这显然不是std::string -
@DavidRodríguez-dribeas:为什么不呢?包含指向元数据块的单独指针的字符串实现是否存在非法行为,ala pimpl?
-
@BenVoigt:我想这在技术上是可能的,但从未见过
std::string的任何实现。 -
sizeof是一个编译时操作符;不是运行时函数,并且(在编译时)评估为type的大小,可以直接提供(sizeof(std::string))或通过表达式 结果类型 (sizeof c2)。最终它是基于类型的。你的问题的不同是由于类型的不同。一个是char[6],另一个是string(我只能假设是std::string,但您没有提供其他信息来确认/否认该假设)。 Read this 了解更多信息。 -
@DavidRodríguez-dribeas: libstdc++-v3 可以(这是自 C++11 以来不符合标准的旧的写时复制实现吗?):gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/bits/…
标签: c++ arrays string size character