C++ C++;性能:使用声明Vs使用声明Vs直接从库中使用名称
在使用标准库对象时,我使用的声明比使用显式C++ C++;性能:使用声明Vs使用声明Vs直接从库中使用名称,c++,performance,C++,Performance,在使用标准库对象时,我使用的声明比使用显式std::方法更多。我遇到了这样一个问题:使用声明s、使用声明性s以及直接使用标准库中的名称是否会提高性能 例如: 要打印“Hello world”,我们可以使用以下方式: 通过使用裸std::方式: std::cout这三种方法都将产生相同的运行时代码,从而提高性能。(通过切换到程序集输出,例如g++-O3-S test.cpp,可以轻松验证) 如果您谈论的是编译时,那么这不太可能产生任何可测量的影响。理论上完全限定名称(::std::cout)可以
std::
方法更多。我遇到了这样一个问题:使用声明s、使用声明性s以及直接使用标准库中的名称是否会提高性能
例如:
要打印“Hello world”,我们可以使用以下方式:
- 通过使用裸
方式:std::
std::cout这三种方法都将产生相同的运行时代码,从而提高性能。(通过切换到程序集输出,例如
,可以轻松验证)g++-O3-S test.cpp
如果您谈论的是编译时,那么这不太可能产生任何可测量的影响。理论上完全限定名称(
)可以减少需要检查的潜在符号的数量。然而,磁盘I/O很可能要重要得多。事实上,我用三种变体对一个简单的程序进行了100次编译测试:::std::cout
,::std::cout
和std::cout
。即使在没有优化的情况下编译(使符号查找尽可能重要)和在快速SSD上编译(使磁盘I/O时间最小化),任何差异都低于噪声级。这对运行时性能没有影响。using在编译时应用这些方法在运行时进行比较时完全相同,因为使用名称空间std;cout
以前是编译的 但是,如果您想创建自己的名称空间,您应该小心using
#include <iostream> namespace test { int a = 1; } using namespace test; int main() { int a = 3; std::cout << test::a << std::endl; // prints 1 std::cout << a << std::endl; // be careful, prints 3 return 0; }
#包括 名称空间测试 { INTA=1; } 使用名称空间测试; int main() { INTA=3;
std::难道我不相信它们在运行时有任何影响。它们主要是关于键入源代码所需的工作。为什么您怀疑性能会有差异?因为我觉得如果使用using声明添加所有不同的名称,那么编译时间会增加一点。此外,我还觉得直接从标准库中填充名称将提高性能。如果有疑问,请检查汇编语言列表和配置文件。如果您所在的系统中的
与std::cout
-滚开!@BoPersson::std::cout