我是否正确解释了 Visual Studio 汇编输出?

Am I interpreting Visual Studio assembly output correctly?

我只是好奇这两行代码是否不同:

bool done = false;
bool done(false);

似乎第二种会更快,因为在第一种情况下我们调用默认构造函数,然后分配值。而在第二个中我们只调用构造函数。

(也许这应该是它自己的问题?)

我卡在断点处并查看了两行的汇编程序输出。他们完全一样:

    bool done = false;
00F66E7D  mov         byte ptr [done],0  

因此,我得出的结论是否正确,这两行是相同的,或者至少编译器正在优化其中的一行?

这是解决此类问题的正确方法吗?

bool 是 C++ 中的基本整数类型。它没有构造函数,并且行完全相同。也不需要优化,因为操作是简单的零赋值。

 bool done = false;
 bool done(false);

It seems that the second would be faster as in the first case we call the default constructor, then assign the value. Whereas in the second we only call the constructor.

没有。在第一种情况下,您在技术上创建了一个临时 bool 值并使用该值的副本来初始化 done。但是,所有编译器都会优化复制并直接初始化 done。而且它不是先默认初始化的。

在第二种情况下,您使用的是 done 的直接初始化。没有创建副本。

当然,对于 bool 值,这没有区别。

对于某些 class 类型,您将看到的唯一区别是如果禁用复制(使用 = delete),第一个版本将不会编译(即使允许编译器优化class 对象的任何副本)。如果它编译,结果代码将是相同的。