当我这样做时:
string s="hello";
cout<<sizeof(s);
然后它显示4作为答案,但是当我找到一些单独的值时:
string s="hello";
cout<<sizeof(s[2]);
它显示1作为输出。通过这个输出,1st的答案应该是5,因为字符串中有五个字符。我哪里错了? (我在Ideone上运行了这个。)
答案 0 :(得分:0)
sizeof
operator给出了给定类型或表达式占用的内存(以字节为单位)。对于原始类型,这很简单。对于类/结构,它返回结构本身的字段占用的字节数,不一定是指向数据;它对于该类型的每个实例都是相同的。
另见this answer。
<强>示例:强>
sizeof(char) // 1
sizeof(9001) // sizeof(int), usually 4
struct mystring {
const char* data;
};
mystring foo = {"foo"};
sizeof(mystring) // probably sizeof(const char*), depending on packing; let's say 4
sizeof(foo) // will always be same as above; 4
foo.data = "cornbread is tasty";
sizeof(foo) // the struct itself still takes up the same amount of space; 4
答案 1 :(得分:0)
sizeof()
返回指定参数的类型的编译时字节大小。
s
变量是std::string
类的实例,因此sizeof(s)
返回std::string
类本身的字节大小,在32位中为4可执行文件(64位可执行文件中的8),因为std::string
类包含单个数据成员,该成员是指向已分配字符数据的指针。如果您想知道运行时为字符串分配了多少个字符,请改用std::string::size()
方法。这将返回你正在寻找的5。
s[2]
返回char
,因此sizeof(s[2])
会返回char
类型的字节大小,即1。