string的sizeof和构造函数
别逗我乐 2009-06-09 11:57:56 #include<iostream>
#include<cstring>
#include<string>
using std::cout;
using std::endl;
int main(int argc,char *argv[])
{
std::string a("123");
cout<<sizeof(a)<<endl;//notice:it is always 4
std::string b("456");
cout<<&a<<endl;//0x22ff68
cout<<&b<<endl;//0x22ff58 这两个地址之间的应该就是a的内容呀
return 0;
}
我的编译器是MinGw
1.
cout<<sizeof(a)<<endl;不随着string所包含字符串的大小变动。为什么呢?难道string对象存储,字符串是使用指针实现的?
2.
我不是很清楚,
std::string a("123");
std::string a = "123";的区别。
前者是调用string的构造函数,后者呢?
是先 转换构造函数,再拷贝构造函数?
还是两者等价。
3.
char *array1="1234";与char array2[]="1234";
前者应该是在堆上分配的,后者是栈上的。我想知道,是不是指针所指向的内容都是在栈上分配的?
另外C++ 的栈,地址是逐渐变大的,是小顶堆吧?
提问的问题有点多,先谢谢大家了。