我在一家贸易公司工作,这里的延迟很重要。分配给我的项目是使用c和c++98部分混合开发的,但我相信我们可以使用C++11开发相同的项目,而不会降低效率。正如我和前辈们讨论的那样,他们说你应该坚持使用C和c++03,因为它们在微观层面上比C++11更有效。如果我使用C++11,谁能突出显示我,我会得到更好的结果吗?
发布于 2017-11-16 16:26:57
C++11的速度更快,因为引入了对象移动。主要是在STL中使用此功能可以大大提高某些应用程序的速度,而无需对用户代码进行任何代码更改。可以比以前更高效地编写应用程序。此外,常量表达式构造可以导致更快的应用程序启动,因为对象可以驻留在小控制器的闪存空间中,而不是将它们复制到ram中。还有更多的特性可以帮助你更高效地编写代码。例如,conatainers的emplace_back有助于在适当的位置生成对象,而不是创建和复制它们。
C++17引入了有保证的复制省略,这在许多用例中也会加快速度。
发布于 2017-11-16 16:32:53
这很大程度上是错误的。
首先,如果您将兼容C++03的源代码提供给像GCC这样的编译器,那么如果您指定--std=c++03而不是--std=c++11,那么生成的机器码就不太可能有任何不同。
其次,使用像auto和“基于范围的”这样的特性对于效率来说是中立的。(在某些情况下,基于范围的for将允许编译器比朴素循环更有效地优化终止条件的计算,但这种情况很少见。)
第三,有一些功能(如移动语义)对效率有积极的好处。
最后,在少数情况下,原始编写的C++11的效率会低于等效的C++03代码。例如:
std::vector<std::vector<big_struct>> big_2d_array;
for (auto v : big_2d_array)
do_stuff(v);这将复制v,并且将是昂贵的。它需要是:
for (auto &v : big_2d_array)
do_stuff(v);请注意参考。(我也推荐const,但这是另一个问题)。
发布于 2017-11-16 16:23:26
老实说,这高度依赖于特定的代码片段。C++11只是C++语言标准(C++11/IEC2011:2011)的较新版本。
较新的版本只更改了某些表达式和语句的语法、某些关键字的使用,以及引入了新的(和有用的)东西,如rvalue reference (T&&)、auto type deduction (auto和decltype)、variadic template parameters (template <typename... Args>)等。尽管一些介绍可能会帮助您编写更有效的代码(例如move semantics),但本质上不会改变编译器从C++源代码生成CPU指令的方式。
因此,在微指令级别,来自相同源代码的编译指令在C++98/0x/11下大部分保持不变,因此在性能上应该不会有任何明显的差异。
实际上,更重要的是您选择的算法,以及编译器优化(通常是-O#命令行参数),以及您编写的特定实现的参数。有了新的标准,你就可以用move语义、range-based for loop、decltype(auto) (不过这个是C++14 )写出更快的代码。
实际上,当语言标准是提供给编译器的唯一不同选项时,此代码生成完全相同的汇编代码:
#include <iostream>
using std::cout;
using std::endl;
int main() {
cout << "Hello world" << endl;
return 0;
}但当你开始使用STL时,它总是尽可能地使用最新的功能,然后它开始产生影响:
#include <iostream>
#include <string>
using std::string;
string getString(void) {
string str("");
for (int i = 0; i < 100000; i ++)
str.append("A");
return str;
}
int main() {
std::cout << getString() << std::endl;
return 0;
}https://stackoverflow.com/questions/47324725
复制相似问题