C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 调用构造函数的次数?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是C编程的初学者,我对C类构造函数一个简单的问题.
为以下代码片段调用构造函数次数是多少?

std::string s = std::string("Hello world");

我想这是两个,对吗?第一个String(const char * s),第二个是String(const String& s).如果我错了,请纠正我.

接下来的问题是,如果我在发布模式下编译代码,编译器会自动对其进行优化吗?例如把它当作std :: String s(“Hello world”);不同的编译器表现不同吗?

解决方法

源类型与目标类型相同的复制初始化(使用=)的行为与直接初始化非常相似.所以初始化相当于:

std::string s(std::string("Hello world"));

如果没有优化,将按照您的描述调用两个构造函数.在C 11中,移动构造函数将优先用于第二步(定义为String(String&&)),因为Std :: String(“Hello world”)是一个rvalue表达式.但是,该标准明确允许在某些情况下省略副本/移动,包括以下内容

因此,如果编译器选择,编译器可以优化掉副本.请注意,即使复制构造函数有一些奇怪的副作用,编译器也可能会这样做.也就是说,完全定义良好且有效的C程序可能具有多个可能的执行路径.通常,你想避免这种情况.

大佬总结

以上是大佬教程为你收集整理的c – 调用构造函数的次数?全部内容,希望文章能够帮你解决c – 调用构造函数的次数?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。