我很好奇这两行代码是否不同:
bool done = false;
bool done(false);
似乎第二个会更快,就像我们调用默认构造函数的第一种情况一样,然后分配值。而在第二个我们只调用构造函数。
(也许这应该是它自己的问题?)
我陷入断点并看了两行的汇编输出。它们完全一样:
bool done = false;
00F66E7D mov byte ptr [done],0
我是否正确地得出结论,两条线是相同的,或者至少编译器正在优化其中一条线?
这是解决这种问题的正确方法吗?
答案 0 :(得分:2)
bool
是C ++中的基本整数类型。它没有构造函数,并且行完全相同。由于操作是零的简单分配,因此也不需要优化。
答案 1 :(得分:2)
bool done = false;
bool done(false);
似乎第二个会更快,就像我们调用默认构造函数的第一种情况一样,然后分配值。而在第二个我们只调用构造函数。
没有。在第一种情况下,您在技术上创建临时bool
值并使用该副本初始化done
。但是,所有编译器都会优化复制并直接初始化done
。并且它不是首先默认初始化。
在第二种情况下,您正在使用done
的直接初始化。没有创建副本。
当然,对于bool
值,这没有任何区别。
对于某些class
类型,您将看到的唯一区别是,如果禁用复制(使用= delete
),则第一个版本将无法编译(即使允许编译器优化任何副本对于类对象)。如果它编译,结果代码将是相同的。