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实现对标准函数的同名重载

[Cpp_overrload_swap]

#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()

C++: How is the process of function calling in C++