这是一个(希望)非常简单的问题-最近有人告诉我,使用C++样式初始化比传统(也是更常见的)赋值更好。

所以这段代码:

std::SomeSTLContainer::const_iterator it = container.begin();
std::SomeSTLContainer::const_iterator itEnd = container.end();

会比“慢”或效率低:
std::SomeSTLContainer::const_iterator it ( container.begin() );
std::SomeSTLContainer::const_iterator itEnd ( container.end() );

我了解其原因-第一个示例导致默认构造和初始化,然后是后续分配,而不是第二个示例中的特定构造和直接分配。但是,在现代处理器/编译器上,它真的有所不同吗?

最佳答案



这是完全错误的。



不,没有关系。 C++标准明确允许在这种情况下省略赋值,以便产生相同的代码。实际上,所有现代C++编译器都可以这样做。

此外,Charles是对的:永远不会调用赋值运算符,而只会调用复制构造函数。但是正如我已经说过的,即使这样也不会发生。

关于c++ - 优化迭代器定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/527663/

10-11 04:08