参数依赖查找中的混淆?

普尼尼·科塔里(Pranit Kothari)

我从这里开始以下面的例子为例

namespace NS 
{
   class A {};
   void f( A *&, int ) {}
}
int main() 
{
   NS::A *a;
   f( a, 0 );    //calls NS::f
}

当我试图在C ++中查找扩展函数时,我遇到了这样的情况。

上面的示例是否简单地表示,如果我以第一个参数作为任何类的对象调用任何函数,并且如果该函数在当前名称空间中找不到,则编译器会在第一个对象的名称空间中找到所需的函数?

如果我错了,这个问题似乎无关紧要,但是C#中的扩展方法是否与ADL有任何关系?

萨胡

你问:

上面的示例是否简单地表示,如果我以第一个参数作为任何类的对象调用任何函数,并且如果该函数在当前名称空间中找不到,则编译器会在第一个对象的名称空间中找到所需的函数?

回答:

通过使用ADL,编译器将找到所有可能的函数。它恰好找到一个,它将使用它。如果发现多个,则会出错。仅当无法在当前名称空间中找到函数时,它才会使用ADL。

范例1:

#include <iostream>
using namespace std;

namespace NS1
{
   struct A {};

   int foo(A a) { return 10; }
}

namespace NS2
{
   struct A {};

   int foo(A a) { return 20; }
}

int main()
{
   cout << foo(NS1::A()) << endl; // Resolves to NS1::foo by using ADL
   cout << foo(NS2::A()) << endl; // Resolves to NS2::foo by using ADL
}

范例2:

#include <iostream>
using namespace std;

namespace NS1
{
   struct A {};
}

int foo(NS1::A a) { return 10; }

namespace NS2
{
   struct A {};

   int foo(A a) { return 20; }
}

int foo(NS2::A a) { return 30; }

int main()
{
   cout << foo(NS1::A()) << endl; // Resolves to ::foo(NS1::A)
   cout << foo(NS2::A()) << endl; // Unable to resolve.
                                  // ::foo(NS2::A) and NS2::foo(NS2::A) are
                                  // equally valid candidates.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与大学讲座中给出的参数示例混淆

来自分类Dev

与C#中的通用参数混淆

来自分类Dev

依赖于参数的好友功能查找

来自分类Dev

对C ++中的名称空间和依赖于参数的查找感到困惑

来自分类Dev

与Gradle依赖相混淆

来自分类Dev

功能依赖混淆

来自分类Dev

Eclipse Maven从类中查找依赖项

来自分类Dev

Maven在错误的目录中查找依赖项

来自分类Dev

在NPM中查找依赖项的根目录

来自分类Dev

在.net中加密或混淆参数,并在SQL中解密

来自分类Dev

传递给C ++中的函数时混淆了参数值

来自分类Dev

在VBA中查找图形的参数

来自分类Dev

与SOLID和依赖注入混淆

来自分类Dev

与pdpotrf参数混淆

来自分类Dev

与方法的参数混淆?

来自分类Dev

onClick()事件与参数混淆

来自分类Dev

依赖参数注入在AngularJS中如何工作?

来自分类Dev

如何在Java中实现使用依赖,枚举数据类型?混淆实现汇总,组合

来自分类Dev

应用了非限定名称查找,而不是依赖于参数的名称查找

来自分类Dev

为什么依赖参数的查找不能与默认参数一起使用?

来自分类Dev

如何从8x8混淆矩阵中查找TP,TN,FP和FN值

来自分类Dev

查找Maven依赖对象的依赖

来自分类Dev

与C的fwrite函数的参数混淆

来自分类Dev

与参数传递和路线混淆

来自分类Dev

混淆传递多词参数

来自分类Dev

如何在SQL Server中查找循环依赖表

来自分类Dev

如何告诉介子在哪个目录中查找依赖项?

来自分类Dev

查找依赖于熊猫中列的最小值

来自分类Dev

在常见的Lisp文件中查找依赖项