c++ - 为什么隐式生成的构造函数(等)比用户定义的(普通的)构造函数更有效?

标签 c++ performance c++11 constructor

我读了这个article今天早上来自 D. Kalev 关于新的 c++11 功能“默认和删除的功能”,并且无法理解关于性能的部分,即:

the manual definition of a special member function (even if it's trivial) is usually less efficient than an implicitly-defined one.

通过谷歌搜索寻找答案,我找到了另一个 article同一作者:

the synthesized constructor and copy constructor enable the implementation to create code that's more efficient than user-written code, because it can apply optimizations that aren't always possible otherwise.

没有解释,但我不时读到类似的说法。

但是怎么写的:

class C { C() = default; };

可以比

更有效率
class C { C(){} };

?我认为编译器足够聪明,可以检测到这种情况并对其进行优化。换句话说,当编译器看到 =default 而不是 {}(void body 函数)时,它如何更容易优化?

编辑:问题被编辑为添加“c++11”标签,但这个问题仍然在 c++03 上下文中:只需替换 class C {C()=default;}; by class C {};,所以不是真正的 c++11 特定问题。

最佳答案

你问,那是怎么回事

class C { C() = default; };

可以比

更有效率
class C { C(){} };

好吧,两个构造函数什么都不做,所以谈论那个例子的效率是没有意义的。

但更一般地说,例如一个复制构造函数,可以想象一次复制一个 POD 项将不会被简单的优化器识别为可优化,而对于自动生成,它可能只执行一个 memcpy。谁知道。这是一个实现质量问题,我也可以很容易地想象相反

因此,衡量是否重要。

干杯,

关于c++ - 为什么隐式生成的构造函数(等)比用户定义的(普通的)构造函数更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275861/

相关文章:

c++ - 6x6 数独游戏,找出你所在的部门

python - 如何过滤掉列表列中包含特定子序列的 Pandas DataFrame 中的行?

C++ 如何使这段代码更高效?

regex - 哪个是更有效的正则表达式?

c++ - 编译器什么时候为类的特殊成员提供定义?

c++ - 模板特化和 enable_if 问题

c++ - Boost::Asio::Ip::Tcp::Iostream 问题

java - 使用 JNI 创建一个简单的 dll 文件

c++ - 加载一个 DLL,该 DLL 调用加载它的 DLL 中的函数

c++ - 哪些 std::async 实现使用线程池?