C++Calling Functions: A Tutorial - Klaus Iglberger - CppCon 2020 - 知识点目录
Posted songyuc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++Calling Functions: A Tutorial - Klaus Iglberger - CppCon 2020 - 知识点目录相关的知识,希望对你有一定的参考价值。
Calling Functions: A Tutorial - Klaus Iglberger - CppCon 2020
(Un-)Qualified Name Lookup
名称查找示例 - [5:48]
A. 域内变量会覆盖域外的同名函数
B. 无限定名字查找只会匹配最先看到的同名函数
而不会考虑实参信息,如图所示N1::h()并不会找到 void f( double ) ,
复现代码:[Cpp_unqualified_lookup]
而如果找到的同名函数不符合调用,则会报错,[Cpp_unqualified_lookup_error]
C. 限定名字查找只会在所指定的域中查找,而不会到上级域中查找
如果指定域中不包含调用的函数名称,则会报错,[Cpp_qualified_lookup_error],错误信息如图所示,
D. 名字查找只会查找之前出现的名称,而不会考虑之后定义的名称
E. [NOTE]: 18:11处并不会产生决议歧义
视频中给出的示例如下:
我们对此示例进行了复现,[Cpp_adl],编译器会选择调用函数(3),
F. 使用using
实现对标准函数的同名重载
#include <iostream>
namespace N1
struct S ;
void swap(S&, S&) std::cout<<"ADL"<<std::endl;;
// namespace N1
template<typename T> void g(T& a, T& b)
using std::swap;
swap(a,b);
int main()
N1::S s1;
N1::S s2;
g(s1,s2);
当调用g(s1,s2)时,ADL会将swap(S&, S&)加入结果集,并传递给重载决议来选择,最后会选定最具体的swap(S&, S&)函数;
G. 函数调用仅重载见过的函数声明 - [20:59]
如果是在调用处之后定义的函数形式,则无法被NameLookup收录,就不会被调用,[Cpp_overload_seen];
课程中的示例如下:
其中,还有一个原因是:模板函数的实例化,其Insights的位置是位于被模板后面,所以在重载决议时不会考虑到定义在更后面的fun(int);
以上是关于C++Calling Functions: A Tutorial - Klaus Iglberger - CppCon 2020 - 知识点目录的主要内容,如果未能解决你的问题,请参考以下文章
C++Calling Functions: A Tutorial - Klaus Iglberger - CppCon 2020 - 知识点目录
HOUR 14 Calling Advanced Functions
Calling Functions With Pointer Parameters
Error: Exception was raised when calling event-notify
YII2安装中遇到的错误解决Calling unknown method: yiiwebUrlManager::addRules()