C++;-&引用;使用;关键字或将命名空间名称与作用域解析运算符一起使用 < > C++中的各种程序都是在没有使用范围解析操作符的情况下编写的: #include <iostream> #include <string> int main() { std::string name = "My Name"; std::cout << name << std::endl; return 0; } #包括 #包括 int main() { std::string name=“我的名字”; std::cout

C++;-&引用;使用;关键字或将命名空间名称与作用域解析运算符一起使用 < > C++中的各种程序都是在没有使用范围解析操作符的情况下编写的: #include <iostream> #include <string> int main() { std::string name = "My Name"; std::cout << name << std::endl; return 0; } #包括 #包括 int main() { std::string name=“我的名字”; std::cout,c++,namespaces,using,scope-resolution,C++,Namespaces,Using,Scope Resolution,假设最终找到相同的名称,效率是相同的:无论函数名称的拼写如何,调用相同的函数都是独立的。主要区别在于名称的定位方式。使用完全限定可以防止(例如)依赖于参数的查找,因此更容易理解 当然,当您确实有一个自定义点时,您可能希望对参数相关的查找使用非限定调用来启动。如果不需要自定义点的默认实现,则不需要使用using声明,甚至不需要使用using指令。自定义的使用不正确点数可能会对性能产生负面影响。例如,当使用swap()时,您不希望使用限定名称: template <typename T>

假设最终找到相同的名称,效率是相同的:无论函数名称的拼写如何,调用相同的函数都是独立的。主要区别在于名称的定位方式。使用完全限定可以防止(例如)依赖于参数的查找,因此更容易理解

当然,当您确实有一个自定义点时,您可能希望对参数相关的查找使用非限定调用来启动。如果不需要自定义点的默认实现,则不需要使用
using
声明,甚至不需要使用
using
指令。自定义的使用不正确点数可能会对性能产生负面影响。例如,当使用
swap()
时,您不希望使用限定名称:

template <typename T>
void some_function(T& v1, T& v2) {
    std::swap(v1, v2); // <--- this is bad! It uses the default implementation

    using std::swap;   // make a default implementation visible
    swap(v1, v2);      // <--- this is better: if it exists uses T's swap()
}
模板
取消某些功能(T&v1、T&v2){

STD::(V1,V2);//P>两个程序都应该产生相同的可执行代码。在C++中,名称查找发生在编译时,而不是运行时,编译器在编译期间找到名称,然后没有任何更改。没有运行时评估,因此用于查找给定名称的语法不会影响程序的效率。
正如Dietmar所说,语法的选择可能会导致找到不同的名称,这可能会改变行为,但假设找到相同的名称,则效率不会有差异。

效率不会有差异。“不使用范围解析运算符”是什么意思?您的示例使用它两次。您的意思是使用?那么,我应该使用“\n”而不是endl吗?@prothomantim:yes-这不会一直刷新流。@t.C:很好。我已将代码段更改为不使用
std::vector
template <typename T>
void some_function(T& v1, T& v2) {
    std::swap(v1, v2); // <--- this is bad! It uses the default implementation

    using std::swap;   // make a default implementation visible
    swap(v1, v2);      // <--- this is better: if it exists uses T's swap()
}