以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助] c++中sizeof的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=41438)


--  作者:tianhuixiayu
--  发布时间:12/20/2006 7:49:00 PM

--  [求助] c++中sizeof的问题
请问一下各位高手
string as[4] = {"a","light","drizzle","was"};
那么下面这些分别表示什么
sizeof(as),
sizeof(as[0])的结果是16
但是sizeof("a")的结果是2,而sizeof('a')的结果是1,
这里as[0]不就是字符串"a"吗,
还有整个数组as每个元素的sizeof的结果都为16,它是以什么为准的,请高手指点,谢谢!
--  作者:fangel2000
--  发布时间:12/20/2006 8:32:00 PM

--  
sizeof("a")的结果是2,而sizeof('a')的结果是1
因为"a"是一个字符串,后面还要加上'\0',所以是2
'a'就是单个字符,所以是1
--  作者:fangel2000
--  发布时间:12/20/2006 8:36:00 PM

--  
sizeof(as[0])的结果是16
是因为它依赖于各个编译器对于string的实现的.

string st1("Hello world!");
string *ps = &st1;
cout << sizeof(ps); // 输出:4
cout << sizeof(*ps); // 输出:16
但是第二句也有人运行出了4


--  作者:卷积内核
--  发布时间:12/21/2006 8:49:00 AM

--  
整个数组as每个元素的sizeof的结果都为16
因为它是该数组中匹配字符最宽长度的,也就是说声明一个数组,每个元素的长度是取决于最宽的那个元素。
--  作者:卷积内核
--  发布时间:12/21/2006 8:51:00 AM

--  
sizeof("a")的结果是2,而sizeof('a')的结果是1,
因为“a”是一个字符串,而‘a’计算时是看作单个字符,所以结果是2和1
--  作者:cqthinking
--  发布时间:4/6/2007 9:34:00 PM

--  
string是一个类,
而它的对象存储的内容多少,
和类本身大小没关系,
个人理解。。。

--  作者:girlstop
--  发布时间:4/7/2007 4:59:00 PM

--  
sizeof(as)       112         ( 28*4)
sizeof(as[0])    28
sizeof("a")       2
sizeof('a')        1


一个string 的大小与它所指的字符串的长度无关,都是28,as就是28*4=112,as[0]就是28;
sizeof操作符应用在char类型上时,在所有的C++实现中结果都是1,所以sizeof('a') 是1;
"a"未声明为string类型,由'a' 和一个结束符组成,所以是2.


--  作者:一分之千
--  发布时间:4/8/2007 12:10:00 PM

--  
这个说的对啊,看下面的代码就可以了~
==================
string是一个类,
而它的对象存储的内容多少,
和类本身大小没关系,
个人理解。。。

#include "iostream.h"
#include <string>
using namespace std;


void main()
{
 string as[4] = {"a","light","drizzle","was"};
 cout<<sizeof(as)<<endl<<sizeof(as[0])<<endl<<sizeof(string)<<endl
  <<sizeof("a")<<endl<<sizeof('a')<<endl;
}


--  作者:girlstop
--  发布时间:4/9/2007 10:38:00 PM

--  
[转载]http://groups.google.com/group/comp.lang.c++/browse_thread/thread/1323970535d6c722?hl=en

Impelentation and performance characteristics of string are not
standardized. g++ probably uses a ref-counted string implementation
with 'copy-on-write' whereas Microsoft/Dinkumware uses SSO (small
string optimization) with an internal buffer resulting in cheap
creation and copying for 'short' strings but expensive copying for
'long' strings.


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
44.922ms