VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: luyamin

继续问复制控制

[复制链接]

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-16 21:45:01 | 显示全部楼层
Foo f = 100;
等於
Foo f(100);
是这样吗?

              
回复

使用道具 举报

0

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-17 14:45:01 | 显示全部楼层
Foo f = 100;
等於
Foo f(100);
是这样吗?
----------
no,
Foo f = 100;相当于我转载文章的第三种情况
Foo f(100);//我转载文章的第二种情况


回复

使用道具 举报

1

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-6-17 19:00:01 | 显示全部楼层
to killingme:

哦,那有可能是g++的问题了。

不过vc6也有问题,Foo f = 100; 这句它可能直接解释为Foo f(100);了,但根据《C++ Primer》中的介绍,应该不是这样的。
回复

使用道具 举报

0

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-17 23:45:01 | 显示全部楼层
不过vc6也有问题,Foo f = 100; 这句它可能直接解释为Foo f(100);了,但根据《C++ Primer》中的介绍,应该不是这样的。
----------------
不是应该不是这样的,详见我转载文章的第三种情况
----
3。T a = v;
....
之所以强调语义上,是因为标准说了这个调用可以优化掉...
--------------
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-6-18 09:15:01 | 显示全部楼层
楼上的是翻译还是自己写的,乱七八糟的.
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-6-18 14:30:01 | 显示全部楼层

我认为这个规定毫无必要.

T v = 0;
T v(0);

唯一的差别就是explicit 关键字.
回复

使用道具 举报

0

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-19 11:15:01 | 显示全部楼层
楼上的是翻译还是自己写的,乱七八糟的.
-----------
不是我自己写的,我还没有这么高的水平~-~
转载别人的,哪里乱了,那篇文章把对象的构造
T a;
T a(v);
T a = v;
的各种情况都说到了,而且是参考的C++标准,感觉说的既全又对阿
回复

使用道具 举报

1

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-8-19 17:15:02 | 显示全部楼层
自己找到答案了:

《C++ Primer》上说:

The copy form of initialization is primarily supported for compatibility with C usage. When it can do so, the compiler is permitted (but not obligated) to skip the copy constructor and create the object directly.
复制形式的初始化(即用=号初始化,本人注)主要是为了兼容C的用法的。当这种用法被支持时,编译器被允许(但不被制强)跳过复制构造函数而直接创建该对象。

我想这段话已经回答我的问题了。

感谢楼上诸位,特别是killingme。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表