c++的string是类

一开始自己给的答案是否定的:

string s1 = "a";
string s2 = "b";
cout << s1 << " " << s2 << endl;               //输出s1,s2
cout << &s1 << " " << &s2 << endl;             //输出s1,s2地址
cout << endl;
s1 = s2;
cout << s1 << " " << s2 << endl;               //输出s1,s2
cout << &s1 << " " << &s2 << endl;             //输出s1,s2地址
a b
0x7fff5fbff478 0x7fff5fbff460

b b
0x7fff5fbff478 0x7fff5fbff460

思考是这样:如果string是类的话,s1 = s2执行之后它们2个的地址应该是一样的。

后来,我看到下面这样:


string str("hello, world");
string s1 = &str[0];
cout << s1 << endl;         //输出s1

char *p = &str[0];
cout << p << endl;          //输出p

它们运行结果是一样的:

hello, world
hello, world

既然string可以取得地址,与指针功能一样,那它应该是个类吧。

最靠谱的做法还是瞄一下文档:


string

长长一串东西有些看不懂,但我确实认得下面高亮那行的"class"修饰符,string无疑是个类:


�basic_string

那为何前面的s1 = s2; 输出的s1和s2地址不一样呢?

经典c++教材《c++ primer(中文版第5版)》p76里说到:
如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。

这句话的意思是,s1 = s2; 这条语句,只能把s2的值拷贝到s1中去。也就是c++把等号(=)运算符重载了,重载后的等号不是指针赋值。导致不能靠这种方式探究string是不是类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,675评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,087评论 18 399
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 1,412评论 0 4
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 3,147评论 0 3
  • 很多人一看到这个标题都会有同感,并且深深的感悟到其中的艰辛,其中的心酸和其中的苦辣!特别是像我们这些所谓的小资产公...
    善谋传媒阅读 630评论 1 2

友情链接更多精彩内容