这是一个(希望)非常简单的问题 - 我最近被告知使用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++标准明确允许省略该情况下的赋值,以便生成相同的代码.实际上,所有现代C++编译器都是这样做的.
另外,Charles是对的:这永远不会调用赋值运算符,而是复制构造函数.但正如我所说,即便如此也不会发生.