int a=10和int a(10)哪个好?哪个快?

leeruixp 2004-04-09 11:16:36
在看c++ primer时注意到这个隐式初始化。有人说int a(10)的效率更高速度更快是不是??那是否有必要以后都使用后者?
...全文
468 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈硕 2004-04-10
  • 打赏
  • 举报
回复
如果
class Foo
{
public:
Foo(int x); // ctor

private:
// ...
};
那么
Foo x(123);

Foo x = 123;
是完全等价的,都是直接调用 constructor。
不会先建临时对象,再copy-ctor;也不会用到operator=()。

如果 Foo(int x); 改为 explicit Foo(int x);
那么 Foo x = 123; 不能通过编译,这是唯一的区别。
DelphiStudy 2004-04-10
  • 打赏
  • 举报
回复
txdyjsyz 2004-04-10
  • 打赏
  • 举报
回复
1: int main()
2: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,48h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-48h]
0040101C mov ecx,12h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3: int a=10;
00401028 mov dword ptr [ebp-4],0Ah
4: int b(10);
0040102F mov dword ptr [ebp-8],0Ah
5: return 1;
00401036 mov eax,1
6: }
0040103B pop edi
0040103C pop esi
0040103D pop ebx
0040103E mov esp,ebp
00401040 pop ebp
00401041 ret

源程序:
int main()
{
int a=10;
int b(10);
return 1;
}

所以是一样的。
xuliye 2004-04-10
  • 打赏
  • 举报
回复
楼上的哥哥!比较普遍的看法是。。。
编译CNonBuildIn a = 10;这句时由编译器生成一个临时对象,然后调用拷贝构造函数,没有operator=()什么事儿。

CNonBuildIn a( CNonBuildIn(10) );
antijpn 2004-04-10
  • 打赏
  • 举报
回复
同以上各位,如果这样的语句上面再有效率的差别,估计做编译器的刻意去吃BB了

但如果不是内置的数据类型,效率上面会有一些差别,第一种要调用缺省构造函数,然后调用operator =,第二种调用拷贝构造函数或者用户定义的构造函数,效率上面的确会有一些差别(如果不用inline修饰,效率上的差别更大)
freefalcon 2004-04-10
  • 打赏
  • 举报
回复
补充Solstice(大佛)的说法:
对于
Foo x = 123; //调用构造函数,无临时对象产生
Foo y = x; //调用拷贝构造函数,无临时对象产生
RookieStar 2004-04-10
  • 打赏
  • 举报
回复
你看了上面的汇编代码就知道了,编译器对此二者一视同仁。
推荐你用第一种,直观而且少打一个字符;-)
Andy84920 2004-04-10
  • 打赏
  • 举报
回复
agree Wolf0403(完美废人)(CSDN CBF)
bshaozi 2004-04-10
  • 打赏
  • 举报
回复
没有区别~
第一个更容易理解~
Mephisto_76 2004-04-10
  • 打赏
  • 举报
回复
没什么区别吧!
Wolf0403 2004-04-10
  • 打赏
  • 举报
回复
对于类对象,某些时候不能使用 = 的语法(例如:std::auto_ptr)
对于基本类型没有区别。
vcchunhong 2004-04-10
  • 打赏
  • 举报
回复
一般情况下是没什么区别的
但是在用构造函数初始化的时候后者比较好
Andy84920 2004-04-10
  • 打赏
  • 举报
回复
对于内部类型来说没有什么效率差别.
当类对象的初始值是个大对象时就有问题了.
因为前者其实是两步完成的.
先构造一个临时对象然后COPY赋值.
angelo23 2004-04-10
  • 打赏
  • 举报
回复
to 楼上
会有拷贝构造函数吗?即便对于类类型的对象而言,如果它的拷贝构造函数是trivial的,虽然概念上会调用拷贝构造函数,然而实际上也只是bitwise copy而已,根本不会有拷贝构造函数的生成和调用。
5420 2004-04-10
  • 打赏
  • 举报
回复
大开眼界,又学到了一些
sharkhuang 2004-04-10
  • 打赏
  • 举报
回复
int a(10)初始化
int a=10.拷贝构造函数.
angelo23 2004-04-10
  • 打赏
  • 举报
回复
1. 对于楼主的问题,答案是效果是相同的,编译器生成的代码应该都是一样的(除非你的编译器是玩具级的:P),而且Bjarne Stroustrup也倾向于在这种情况下用int a=10
2. class t{};
t t0;
t t1(t0);
t t2 = t0;
t t3 = t(t0);
实际上t2,t3都等价于t1的形式,没有区别
而对于CNonBuildIn a = 10;这样的例子,仍然是调用带一个参数的constructor,而不会有临时对象(还是那个前提,你的编译器不是玩具级,弱智型的)
playing0816 2004-04-09
  • 打赏
  • 举报
回复
对于内部数据成员,这两种方式是没有区别的,因为内部的数据没有真正的构造函数的
dada9527 2004-04-09
  • 打赏
  • 举报
回复
我的内存对int来说很大
陈硕 2004-04-09
  • 打赏
  • 举报
回复
这里(对 build-in type),很明显,前者好,一目了然。效率是一样的。(否则写编译器的该打屁屁)
加载更多回复(3)

65,203

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧