社区
C++ 语言
帖子详情
一道关于string的面试问题
czk037
2006-11-16 12:33:03
string strA; strA="sgfrsgf";
string strB="sgfrsgf";
string strC("sgfrsgf");
strA,strB,strC有什么差异?
...全文
2711
37
打赏
收藏
一道关于string的面试问题
string strA; strA="sgfrsgf"; string strB="sgfrsgf"; string strC("sgfrsgf"); strA,strB,strC有什么差异?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
37 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lxhtzy
2006-11-25
打赏
举报
回复
楼上明解了
linghaowangluo
2006-11-25
打赏
举报
回复
学习了
sunbird69
2006-11-25
打赏
举报
回复
收下
liuyingwu
2006-11-23
打赏
举报
回复
强 受益了 谢谢
chary8088
2006-11-22
打赏
举报
回复
第一个:赋值 ,operation = 被调用。
第二个:调用拷贝构造函数。
第三个:调用构造函数。
HappyTree(天行健,君子以自强不息)
dushman
2006-11-22
打赏
举报
回复
天行健,强!
收益了
飞哥
2006-11-21
打赏
举报
回复
weiym(为什么美女都喜欢和我在一起呢,好奇怪)
人 见 人 爱
meric
2006-11-21
打赏
举报
回复
受教,脚印脚印
qwertxp
2006-11-21
打赏
举报
回复
凡路过必留下痕迹。。。
受教~~~
Godlikeme
2006-11-21
打赏
举报
回复
mark
做鸡真好吃
2006-11-17
打赏
举报
回复
mark~
HappyTree
2006-11-17
打赏
举报
回复
to goldcool():
第二个认为是direct constructor只有在编译器对此优化的情况下才是对的。按照C++标准,这里应该是先调用direct constructor生成临时对象,然后由临时对象调用copy constructor生成最终的对象。
我贴的测试程序容易引起误导,因为vc做了优化。如果你换一个编译器,可能得到的是direct constructor + copy constructor。
它事实上相当于Int t4(Int(u));
sosdairs
2006-11-17
打赏
举报
回复
学习中~
三个变量中内容是一样的
看了HappyTree(天行健,君子以自强不息)的测试程序
才明白了它们不同之处
凌风_
2006-11-17
打赏
举报
回复
学习~~
感觉
--------------------
第一个:赋值 ,operation = 被调用。
第二个:调用拷贝构造函数。
第三个:调用构造函数。
--------------------------
和
-----------------
呃,去看C++ Primer 3e p569
结果相同,行为有别。
默认构造+赋值
(隐式)构造
(显式)构造
-------------------
说的一目了然。。。
tianshanfe
2006-11-17
打赏
举报
回复
Type variable(value);
那int a(5);也是可以的咯
OOPhaisky
2006-11-17
打赏
举报
回复
string strA; strA="sgfrsgf";
string strB="sgfrsgf";
string strC("sgfrsgf");
strA,strB,strC有什么差异?
--------------------------------------------------------------------------------
strA,strB,strC的结果都是相同的,但是构造的过程不相同。
strA : 默认构造函数 + 赋值;
strB : "sgfrsgf"首先被转换为一个临时的string对象(利用string的构造函数:string(const char *) ),然后再调用copy constructor,用这个临时的string对象去初始化strB。(注:大部分的编译器会将第一个临时的string对象优化掉)
strC : 调用string的构造函数:string(const char*) 对strC进行初始化。
goldcool
2006-11-17
打赏
举报
回复
楼上的(HappyTree(天行健,君子以自强不息))厉害,最终解释
第一个:的确是调用 default constructor + copy assign operator
第二个:并没有调用copy constructor ,而是直接用 "显示声明的"(不要和explicit混淆) constructor
第三个:同第二个一样。
来来去去还是那句话,C++的初始化支持两种形式。
Type variable=value;
Type variable(value);
可以结帖了
HappyTree
2006-11-17
打赏
举报
回复
来个测试程序,楼主跑跑看
#include <iostream>
using namespace std;
class Int
{
public:
Int()
{
cout << "Default Constructor" << endl;
}
Int(int a) : a_(a)
{
cout << "Direct Constructor" << endl;
}
Int(const Int& other)
{
cout << "Copy Constructor" << endl;
a_ = other.a_;
}
Int& operator =(const Int& other)
{
cout << "Copy Assign Operator" << endl;
a_ = other.a_;
return *this;
}
private:
int a_;
};
int main(int argc, char* argv[])
{
int u = 10;
cout << "Int t1: ";
Int t1;
cout << "Int t2(): Prototyped Function" << endl;
Int t2();
cout << "Int t3(u): ";
Int t3(u);
cout << "Int t4 = u: ";
Int t4 = u;
cout << "Int t5(t4): ";
Int t5(t4);
cout << "Int t6 = t4: ";
Int t6 = t4;
cout << "t1 = t4: ";
t1 = t4;
return getchar();
}
HappyTree
2006-11-17
打赏
举报
回复
同意一楼的
taodm
2006-11-17
打赏
举报
回复
最后结果相同。
效率,只能说第三个绝不比其它的慢,第一个和第二个得看编译器及优化项。
一般3 = 2 > 1
加载更多回复(17)
一道
印象深刻的
面试
题:
String
参数传递
问题
本文通过一个Java
面试
题实例,详细解析了
String
对象的不可变特性及其背后的原理,并探讨了基本数据类型与引用类型的区别,以及Integer对象创建方式的不同影响。
2019年9月份平安智慧企业
面试
题
在平安智慧企业的
面试
中,关于Java中
String
的可变性
问题
成为了
一道
灵魂拷问。本文将深入讨论Java中
String
对象的本质,解释其为何被认为是不可变的,以及这种特性对编程实践的影响。
string
取前几个字符_
String
s = new
String
("xyz")创建了几个实例你真的能答对吗?...
本文从
一道
面试
题展开,分析
String
s = new
String
(\xyz\)创建实例的数量。先介绍了
String
结构,指出原
问题
和答案存在的
问题
。接着探讨了正常
问题
的合理答案及不足,还分析了类加载、JVM优化、klass - oop模型和字符串常量池等因素对实例创建数量的影响,最终得出答案因多种因素而异。
String
类型的两个大数相加
本文介绍了如何处理
String
类型的两个大数相加
问题
,提供了
一道
字节跳动的
面试
题,并给出了详细的代码实现,重点在于理解代码逻辑。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章