社区
C++ 语言
帖子详情
一道关于string的面试问题
czk037
2006-11-16 12:33:03
string strA; strA="sgfrsgf";
string strB="sgfrsgf";
string strC("sgfrsgf");
strA,strB,strC有什么差异?
...全文
2646
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
的
面试
题
一道
关于
String
的
面试
题 main(
String
[] args) {
String
str1 = "橙汁"; str1 += "加上雪碧"; str1 += "加上雪碧"; str1 += "加上雪碧"; str1 += "加上雪碧"; str1 += "加上雪碧"; System.out.println("这里面有几个字符串"); } 答案是12个,具体分析过程需要等以后整理后再更新 ...
这道关于
String
的
面试
题据说80%的人会答错!
很多人都会答错的
一道
关于
String
的题目,究竟有什么难度? 今天轻松点,我们一起来看
一道
关于
String
的
面试
题,准确说是改编的
面试
题! 小白: 庆哥,今天我们要学习什么知识啊? 庆哥: 今天我们就轻松一下,简单来看
一道
关于
String
的题目,毕竟等会我还要看沙海呢。 小白: 哈哈,没想到庆哥还追剧啊。 庆哥: 劳逸结合嘛,大脑总是需要休息的啊,看看电视剧休息一下还蛮好的,好了...
回顾JavaSE(5)-
String
(4)7行代码分析
一道
关于
String
拼接的经典
面试
题
看了最近几个
String
系列的小伙伴可能会很纳闷,这么简单的东西有必要写一篇博客吗?是不是有点浪费感情? 然而并不会,平心而论,看完代码秒出结果,并且是正确的结果,必须要有深厚的JavaSE功底,这样的人,不多。 今天我们通过7行代码分析
一道
关于
String
拼接的经典
面试
题。 请先看代码:
String
s11 = "Hello";
String
s12 = "World"; S
一道
String
面试
题
能用代码解决不瞎比比!public class Test { public static void changeStr(
String
str) { str = new
String
("welcome"); } public static void main(
String
[] args) {
String
str = "1234";
关于
String
的
面试
题
1.以下代码分别创建了几个对象
String
str1 = “123”;
String
str2 = new
String
(“123”):; 我们先来看下面这张图 我们先说常量池,常量池分为 1;编译常量池:当字节码加载进jvm的时候,存储字节码相关的信息 2;运行常量池:存储常量数据
String
str1 = "123"再来看这
一道
题 所以我们知道,“123”这个常量是存储在方法区的常量池中的...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章