jjzjj

c++ - 什么是 "Argument-Dependent Lookup"(又名 ADL,或 "Koenig Lookup")?

关于什么是参数依赖查找有哪些好的解释?许多人也将其称为KoenigLookup。最好我想知道:为什么这是一件好事?为什么这是一件坏事?它是如何运作的? 最佳答案 Koenig查找,或ArgumentDependentLookup,描述了编译器如何在C++中查找非限定名称。C++11标准§3.4.2/1指出:Whenthepostfix-expressioninafunctioncall(5.2.2)isanunqualified-id,othernamespacesnotconsideredduringtheusualunquali

c++ - 什么是 "Argument-Dependent Lookup"(又名 ADL,或 "Koenig Lookup")?

关于什么是参数依赖查找有什么好的解释?许多人也将其称为KoenigLookup。最好我想知道:为什么这是一件好事?为什么这是一件坏事?它是如何工作的? 最佳答案 Koenig查找,或ArgumentDependentLookup,描述了C++中编译器如何查找非限定名称。C++11标准§3.4.2/1规定:Whenthepostfix-expressioninafunctioncall(5.2.2)isanunqualified-id,othernamespacesnotconsideredduringtheusualunqualif

c++ - Koenig 的查找是否适用于此?

以下片段是否正确的C++代码?#includeclassFoo;std::ostream&operatorMessage&operator根据http://goo.gl/NkPNauGCC编译得很好,而Clang没有找到operator(B).如果您想知道:这是来自将GTest与自定义operator结合使用的代码对于std::set打印漂亮的断言消息。除了将operator(B)在std命名空间中(是的,我知道...)。 最佳答案 Clang在这里是正确的。让我们将g++的行为称为语言扩展。参数相关查找(又名Koenig查找)确实

C++ 运算符查找规则/Koenig 查找

在编写测试套件时,我需要提供operator的实现供Boost单元测试使用。这行得通:namespacetheseus{namespacecore{std::ostream&operator这不是:std::ostream&operator显然,当g++尝试解决运算符的使用时,第二个未包含在候选匹配中。为什么(是什么规则造成的)?调用operator的代码深入Boost单元测试框架,但这里是测试代码:BOOST_AUTO_TEST_SUITE(core_image)BOOST_AUTO_TEST_CASE(test_output){usingnamespacetheseus::core

c++ - 为什么标准容器使用函数模板而不是非模板 Koenig 运算符

这个问题的灵感来自Issuewithstd::reference_wrapper.比如说,operator对于std::vector.它被定义为函数模板templatebooloperator&lhs,constvector&rhs);因此,函数参数到相应函数参数类型的隐式转换被拒绝(主要是因为它的模板性质)。这大大降低了std::reference_wrapper的实用性和便利性。.例如,您不能使用std::sort在std::vector>>.另一方面,所有问题都只有在operator的情况下才能解决。被定义为非模板Koenig运算符,如templateclassvector...