博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
罗列C++语言中一些不太引人注意的细节
阅读量:5213 次
发布时间:2019-06-14

本文共 1020 字,大约阅读时间需要 3 分钟。

Argument dependent name lookup (又称作Koening name lookup)

它的含义是指,对于未通过命名空间限定的函数调用(英文叫unqualified),编译器会参照各个参数所在的命名空间,去查找相应函数的定义和声明。将起来太抽象,举个例子

#include 
namespace Layer1 { class ClassInLayer1 { public: ClassInLayer1() = default; }; void foobar(ClassInLayer1 c) { std::cout << "foobar in Layer 1" << std::endl;} }; namespace Layer2 { class ClassInLayer2 { public: ClassInLayer2() = default; }; void foobar(ClassInLayer2 c) { std::cout << "foobar in Layer 2" << std::endl;} } int main() { Layer1::ClassInLayer1 c1; Layer2::ClassInLayer2 c2; foobar(c1); foobar(c2); return 0; }

可以看到,main函数中有两个foobar的函数调用,其中一个的入参是Layer1::ClassInLayer1,而另一个是Layer2::ClassInLayer2。虽然这两个foobar都没有用命名空间去限定(完整的写法应该是Layer1::foobar(c)),此时编译器会根据入参所在的命名空间,去寻找相应的函数定义。程序的输出是

ken@ken-N56VZ ~/Documents/trialInferno/C++ $ ./a.out

foobar in Layer 1
foobar in Layer 2

 

转载于:https://www.cnblogs.com/ninja-ken/p/11068454.html

你可能感兴趣的文章
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
LeetCode:Median of Two Sorted Arrays
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
优化算法系列-模拟退火算法(1)——0-1背包问题
查看>>
数据结构与算法系列——排序(15)_外部排序
查看>>
JVM系列之三:类装载器子系统
查看>>
LeetCode:32 Longest Valid Parentheses
查看>>
day18
查看>>
java技术汇总
查看>>
Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
查看>>
git bash 的命令
查看>>
Java并发编程笔记之LinkedBlockingQueue源码探究
查看>>
转:基于用户投票的排名算法系列
查看>>
多线程简单实用
查看>>