关于sizeof(str) 的疑问

reme 发布于 2011/08/31 15:30
阅读 621
收藏 0

str 是一个C++字符串类对象,这样定义:string str="asdfg";还有就是为什么不包含<string> 也能使用length() 这样的函数?请大侠们支招,谢谢了!

加载中
0
TrulyBelieve
TrulyBelieve
str是C++对象,sizeof(str)是取得str占用的内存大小,差不多是str对象成员变量的内存之和,应该不是它指向的字符串的长度。
0
xyz555
xyz555

在C/C++里 sizeof 不是函数

你可以写成

对于变量你可以像这样 int a = 4; int b = sizeof a;

但数据类型必须用括号括 如sizeof(int)

另外楼主你确认在不包含<string> 时使用string str="asdfg";或者头文件中的头文件不包含<string>时不会报错?

reme
reme
不信你自己试试吧
0
reme
reme

引用来自“xyz555”的答案

在C/C++里 sizeof 不是函数

你可以写成

对于变量你可以像这样 int a = 4; int b = sizeof a;

但数据类型必须用括号括 如sizeof(int)

另外楼主你确认在不包含<string> 时使用string str="asdfg";或者头文件中的头文件不包含<string>时不会报错?

我关心的是为什么是32,这让我觉得他是一个指针,而且在调试的时候光标停在变量处会提示错误的指针,另外我确认不会报错,我包含的头文件是iostream 以及using namespace std
xyz555
xyz555
有的时候你没有直接include,但你include的其他头文件中include了这个头文件。
xyz555
xyz555
"还有就是为什么不包含<string> 也能使用length() 这样的函数?"是我的理解有问题,还是楼主的表述有问题。楼主要明白string是在<string>或<string.h>中定义,如果不间接包含<string>或<string.h>,string str这样的申明就一定会报错。
0
RickHuang
RickHuang
sizeof用在一个对象上时,表示返回对象所占用的内存字节数。如果对象有个指针成员,那么只会范围指针自己占用的字节数,而不会返回指针指向的内存数。
0
周翼翼
周翼翼
iostream->ostream->ios->xlocnum->streambuf->xiosbase->xlocal->stdexcept->xstring,string在xstring里有定义.总之g定是间接包含了string的定义就是了." 调试的时候光标停在变量处会提示错误的指针",你F10一下,运行到下一步看看.像 string str="asdfg";定义的话, 光标在这一行时,构造函数还没执行.
0
甘薯
甘薯

sizeof用在对象实例上的时候,

不管这个对象类是如何定义的。

返回的永远是一个指针,所以长度永远是32位.

因为不管你是如何定义这个对象实例,new 也好,静态堆栈声称也罢,

结果都是返回一个指针给你。不同的是new 你需要用->来使用,而静态堆栈你只需要用.来引用。

本质上都是一个东西。

 

返回顶部
顶部