C中的类对象创建

C中的类对象创建,第1张

概述我有一个基本的C问题,我真的应该知道答案. 假设我们有一些带有构造函数A(int a)的类A.有什么区别: A test_obj(4); 和 A test_obj = A(4); ? 我通常使用后一种语法,但在查找了我可信赖的C引物中无关的内容后,我意识到它们通常使用前者.这两者之间的差异经常在内置类型的上下文中讨论(例如int a(6)vs int a = 6),我的理解是在这种情况下它们是等价 我有一个基本的C问题,我真的应该知道答案.

假设我们有一些带有构造函数A(int a)的类A.有什么区别:

A test_obj(4);

A test_obj = A(4);

我通常使用后一种语法,但在查找了我可信赖的C引物中无关的内容后,我意识到它们通常使用前者.这两者之间的差异经常在内置类型的上下文中讨论(例如int a(6)vs int a = 6),我的理解是在这种情况下它们是等价的.

但是,在用户定义的类的情况下,定义对象等效的两种方法是什么?或者后一个选项是否首先默认构造test_obj,然后使用A的复制构造函数将A(4)的返回值赋给test_obj?如果这是第二种可能性,我想大型课程的两种方法之间可能存在一些性能差异.

我确信这个问题在互联网上的某个地方得到了解答,即使在这里也是如此,但是如果没有找到问题,要求区分第一个选项和使用new,这是无关的,我无法有效地搜索它.

解决方法 A test_obj = A(4);在概念上确实构造了一个临时的A对象,然后从临时复制/移动构造test_obj,然后破坏临时.

但是这个过程是copy elision的候选者,这意味着允许编译器将其视为A test_obj(4);在验证复制/移动构造函数存在且可访问之后.

从C17开始,编译器必须这样做;在此之前它是可选的,但通常编译器确实这样做.

总结

以上是内存溢出为你收集整理的C中的类对象创建全部内容,希望文章能够帮你解决C中的类对象创建所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存