首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++符号范围搜索顺序与模板和非模板类不同?

在C++中,符号范围搜索的顺序是类、模板、非模板,这是由C++的编译器决定的。因此,当使用::操作符进行符号范围搜索时,首先会搜索非模板类,然后是模板类,最后是类本身。

对于模板类,搜索的顺序是按照模板参数推导的顺序进行的。在模板推导过程中,编译器会按照参数类型、推导类型、cv修饰符等顺序进行推导。

对于非模板类,搜索的顺序是直接按照类名的字母顺序进行的。

总的来说,C++的符号范围搜索顺序是在编译期间确定的,与模板和非模板类的定义以及命名空间无关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++】泛型编程 ⑬ ( 模板示例 - 数组模板 | 构造函数析构函数 的 声明实现 | 普通成员函数 的 声明实现 | 外部友元函数 的 声明实现 )

一、模板示例 - 数组模板 1、需求分析 模板 的 作用就是 令 算法 数据类型分离 ; 本篇博客中 开始 使用 模板 开发一个 数组 , 数组 中 可以维护 不同类型的 元素数据 , 如...的 声明实现 在声明时 , 前面加上 模板类型声明 template , 说明在中要使用类型 T ; 在 Array 中 , 声明 构造函数 , 拷贝构造函数 , 析构函数..., 这里使用 Array:: 访问模板 中的 函数 ; 注意 : 如果在 函数参数 函数返回值 中 , 使用到了 Array 类型 , 那么也必须加上 实际类型 , 否则编译时会报错...内部定义 , 模板内部定义的 操作符重载函数 , 其 左操作数 必须是 本身 ; 外部友元函数 的 声明 : 声明时 , 需要在 函数名 参数列表之间 注明 泛型类型 ; 实现时 , 不能在...声明实现 分开编写 // 由于有 二次编译 导致 导入 .h 头文件 模板函数声明 无法找到 函数实现 // 必须 导入 cpp 文件 #include "Array.cpp" int main

45810

C++】泛型编程 ⑪ ( 模板的运算符重载 - 函数实现 写在外部的不同的 .h 头文件 .cpp 代码中 )

模板 函数声明 函数实现 分开进行编码 , 有 三种 方式 : 模板 的 函数声明 函数实现 都写在同一个中 , 也就是没有分开进行编码 ; 模板 的 函数实现 在 外部进行 ,...函数声明 实现 写在相同的 .cpp 源码文件中 ; 模板 的 函数实现 在 外部进行 , 函数声明 实现 写在不同的 .h .cpp 源码文件中 ; 在博客 【C++】泛型编程 ⑨ (...模板的运算符重载 - 函数声明 函数实现 写在同一个中 | 模板 的 外部友元函数问题 ) 中实现了第一种情况 , 模板 的 函数声明 函数实现 都写在同一个中 , 也就是没有分开进行编码...函数实现 在 外部进行 , 写在 一个 cpp 源码文件中 ; 在本篇博客中 , 开始分析 第三种 情况 , 函数实现 在 外部进行 , 函数声明 实现 写在不同的 .h .cpp 源码文件中...; 一、模板的运算符重载 - 函数实现 写在外部的不同的 .h 头文件 .cpp 代码中 1、分离代码 后的 友元函数报错信息 - 错误示例 上一篇博客 【C++】泛型编程 ⑩ ( 模板的运算符重载

23510
  • 【笔记】《Effective C++》条款1-25

    这些行为结果并非报错, 而是编译器执行环境相关的无法估计的结果 "接口"通常指函数的签名 1 让自己习惯C++ 1 视C++为一个语言联邦 将C++看作是以多个相关语言组成的结合体而不是一个关系紧密的单一语言...: C语言: C++的基础结构 面向对象部分: C++创造时的目标 模板C++: 为了支持泛型编程而创建的语法, 并实现了模板元编程(TMP)这种奇技淫巧 标准模板库: 充分运用了模板C++编写的程序库...通过inline的特性模板函数能够达到宏一样的效率 3 尽可能使用const 只要某个对象事实上是不变的, 那么就应该标记const, 这样能获得更大的使用范围 const的特性: 默认作用于左边的对象..., 而是为了给原始指针加上资源回收的功能, 所以不必给RAII加太多功能 16 成对使用的newdelete时要采取相同的形式 由于下图的内存排列特性, 不要混淆不同的newdelete, 否则容易引发未定义行为...因为编译器会自由安排函数不同参数的求值顺序, 有可能顺序变为new->调用函数->构造智能指针.

    1.1K30

    C++复习笔记——C++ 关键字

    C++ 中的 bool类型可以int混用,具体来说就是0代表false,0 代表 true。bool类型常用于条件判断函数返回值。...export 为了访问其他编译单元(如另一代码文件)中的变量或对象,对普通类型(包括基本数据、结构),可以利用关键字 extern,来使用这些变量或对象时;但是对模板类型,则必须在定义这些模板对象模板函数时...unsigned unsigned(无符号),表明该类型是无符号数,signed 相反。...do do-while是一循环结构。while循环不同,do-while循环保证至少要进入循环体一次。...只能用于静态非常量数据成员。由于一个对象的状态由该对象的静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化。

    1.3K30

    C++第八弹 -- 模板STL简介

    2.4 实例 用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化显式实例 化。...模板 3.1 格式 template class 模板名 { // 内成员定义 }; // 动态顺序表 // 注意:Vector...= 0; } 3.2 实例 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在 中即可,模板名字不是真正的,而实例化的结果才是真正的。...Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。...组件 总结 本文介绍了C++中的模板标准模板库(STL)。STL作为C++标准库的重要组成部分,为开发者提供了丰富的数据结构算法框架。 完

    7410

    初识模板及其STL

    命名空间 缺省参数函数重载 C++相关知识 对象上 对象中 对象下 C/C++内存管理 引言  本章将简单分享C++模板STL相关知识,之相关更多知识将留到下次更详细地来分享给大家...对此C++提出模板的概念,对于模板分为函数模板以及模板。 二、函数模板 函数模板代表了一个函数家族,该函数模板类型无关(通用),在使用时被参数化,根据实参类型产生函数的特点类型版本。...当同名函数模板模板函数同时存在,该函数模板可以实例化为函数模板。...,class Tn> class 模板名 { //内成员定义 }; // 动态顺序表 // 注意:Vector不是具体的,是编译器根据被实例化的类型生成具体的模具...3.2 模板的实现化 模板实例化函数模板实例化不同模板实例化需要在模板名字后,然后将实例化的类型放在中即可,模板名字不是真正的,而实例化的结果才是真的 //Vector名,Vector

    10910

    C++服务编译耗时优化原理及实践

    一、背景 美团搜索NLP部为公司提供基础的搜索平台服务,出于性能的考虑,底层的基础服务通过C++语言实现,其中我们负责的深度查询理解服务(Deep Query Understanding,下文简称DQU...② 外部模板语法:extern template class vector。 一旦在一个编译单元中使用了外部模板声明,那么编译器在编译该编译单元时,会跳过该外部模板声明匹配的模板实例化。 4....例如:对分支的合并和消除,对公用子表达式的消除,对循环内load/store操作的替换更改等,都将会使目标代码的执行顺序变得面目全,导致调试信息严重不足。...分布式编译 使用分布式编译技术,比如利用DistccDmucs构建大规模、分布式C++编译环境,Linux平台利用网络集群进行分布式编译,需要考虑网络时延网络稳定性。...当在广泛使用模板的项目中,编译器会产生大量的冗余代码,这会极大地增加编译时间链接时间。C++ 11新标准中可以通过外部模板来避免。

    1.9K20

    C++知识概要

    一个派生构造函数的执行顺序如下 虚拟基的构造函数(多个虚拟基则按照继承的顺序执行构造函数) 基的构造函数(多个普通基也按照继承的顺序执行构造函数) 类型的成员对象的构造函数(按照初始化顺序...为什么 C++的大小不为 0,不同编译器设置不一样,vs 设置为 1 C++标准指出,不允许一个对象(当然包括对象)的大小为 0,不同的对象不能具有相同的地址 带有虚函数的 C++大小不为...即函数模板允许隐式调用显式调用而模板只能显示调用。在使用时模板必须加,而函数模板不必 C++四种类型转换 static_cast 能进行基础类型之间的转换,也是最常看到的类型转换。...这两者在存储方式上并无不同。这两者的区别在于静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,静态的全局变量在各个源文件中都是有效的。...static 全局变量普通的全局变量的区别是 static 全局变量只初始化一次,防止在其他文件单元被引用。 static 函数普通的函数作用域不同

    1.1K20

    C++】侯捷C++面向对象高级编程(下)

    但是sp->method(),我们可以看到,调用sp->在右侧的中,返回px,再往下看px->method(),会发现,这里其实少了一个->,这里就体现出这个符号的特殊性了,得到的东西会继续用箭头符号作用上去...范围上的偏 例如,从接收任意范围T,到接收指针T* ---- 模块模板参数(tempalte template parameter) 即,模板的参数又是一个模板 如上图所示,传递任意的容器元素类型进行组合...---- 复合下的构造析构 构造——由内而外 析构——由外而内 ---- 继承+复合下的构造析构 构造——由内而外 但是此时内有两个,也许在不同编译器上的实现手法不同,...可能会导致顺序不同。...但是,当成员函数的const版本const版本都存在,则常量对象只能调用const版本,const对象只能调用const版本。

    67420

    学习PCL库你应该知道的C++特性

    基本介绍请查看文章:点云及PCL编程基础 .h.hpp文件的区别 *.h类似,hpp是C++程序头文件,其实质是将cpp中的实现代码放在.hpp文件中,定义实现都包含在同一个文件中,在使用的时候只需要...该文件具有的特点: .hpp.h文件类似,hpp也是C++程序的头文件。 是一般模板的头文件 一般来说。....模板是一种对类型进行参数化的工具,通常有两种形式:函数模板模板。 函数模板针对仅参数类型不同的函数,模板针对仅数据成员成员函数类型不同。...注意:模板的申明或者定义智能在全局,命名空间或者范围内进行,既不能在局部范围,函数内进行,比如不能在主函数中申请或者定义一个模板。...关键字inline 必须函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。 extern“C”的作用 extern "C"的真实目的是实现CC++的混合编程。

    1.2K20

    C++:模版初阶 | STL简介

    2.3 函数模板的实例化     用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化显式实例化。...一个模板函数可以一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个模板函数。...2、 对于模板函数同名函数模板,如果其他条件都相同,在调动时会优先调用模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板  3....3.2 模版的实例化 模板实例化函数模板实例化不同(无法像函数那样根据参数类型去推导,必须用户显式实例化),模板实例化需要在模板名字后跟,然后将实例化的类型放在中即可,模板名字不是真正的...Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

    14110

    PCL库中的C++特性

    基本介绍请查看文章:点云及PCL编程基础 .h.hpp文件的区别 *.h类似,hpp是C++程序头文件,其实质是将cpp中的实现代码放在.hpp文件中,定义实现都包含在同一个文件中,在使用的时候只需要...该文件具有的特点: .hpp.h文件类似,hpp也是C++程序的头文件。 是一般模板的头文件 一般来说。....模板是一种对类型进行参数化的工具,通常有两种形式:函数模板模板。 函数模板针对仅参数类型不同的函数,模板针对仅数据成员成员函数类型不同。...注意:模板的申明或者定义智能在全局,命名空间或者范围内进行,既不能在局部范围,函数内进行,比如不能在主函数中申请或者定义一个模板。...关键字inline 必须函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。 extern“C”的作用 extern "C"的真实目的是实现CC++的混合编程。

    1.1K30

    C++初阶大全

    2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。 3. 是流插入运算符,>>是流提取运算符。 4....函数重载 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题...1.范围for的使用条件 1. for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素最后一个元素的范围;对于而言,应该提供 beginend的方法,beginend就是for循环迭代的范围....函数模版模版 函数模板 函数模板概念 函数模板代表了一个函数家族,该函数模板类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本 函数模板格式 .1 函数模板格式 template...= 0; } 模板的实例化 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在中即可,模板名字不是真正的,而实例化的结果才是真正的

    5710

    C++初阶

    2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。 3. 是流插入运算符,>>是流提取运算符。 4....函数重载 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题...1.范围for的使用条件 1. for循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素最后一个元素的范围;对于而言,应该提供 beginend的方法,beginend就是for循环迭代的范围....函数模版模版 函数模板 函数模板概念 函数模板代表了一个函数家族,该函数模板类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本 函数模板格式 .1 函数模板格式 template...= 0; } 模板的实例化 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在中即可,模板名字不是真正的,而实例化的结果才是真正的

    10010

    C++】如何巧妙运用C++命名空间:初学者必备指南

    ,新增保护成员、多重继承、对象的初始化、抽象、静 态成员以及const成员函数C++3.0 进一步完善,引入模板,解决多重继承产生的二义性问题相应构造析构的处 理C++98...三、命名空间对于C++符号常量、变量、函数、对象等。在工程中会频繁地对对象取名称,可能导致名称冲突(程序员间或者程序员和头文件间)。...四、编译器搜索原则不指定域:1.当前局部域 2.全局域指定域:如果指定域,直接去指定域搜索(优先去域中搜索,比如std::cout)::是域作用限定符(优先向全局范围搜索)int x=10;int main...0;}使用cout标准输出对象(控制台)cin标准输入对象时,必循包含头文件以及按照命名空间使用方式使用stdcoutcin是全局的流对象,endl是特殊的C++符号,表示换行输出...这里只需要简单学习他们的使用就行,后面还有不断深入学习关于第三点第四点:#include using namespace std;int main(){//为什么Cpp兼容C,对此一些符号可以有多重意思

    18110

    C++模板初阶:泛型编程的起点

    C++模板可以分为函数模板模板: 在学习模板之前我们先要了解一下什么是泛型编程 1.泛型编程 泛型编程是一种编程范式,它允许在编写代码时使用一种通用的数据类型或算法,以便在不同的数据类型上进行操作...在C++中,使用函数模板模板STL(标准模板库)等机制来实现泛型编程。其他编程语言如JavaC#也提供了类似的泛型编程机制。...通过模板,可以定义出类型无关的通用,使得代码可以复用,同时也能满足不同类型的需求。 3.2格式 模板的定义一般使用关键字template,后跟模板参数列表。...., class Tn> class 模板名 { // 内成员定义 }; 例如顺序表,我们如果需要几个存放不同的数据类型的顺序表就可以利用模板,从而不需要多次定义: // 动态顺序表 // 注意...> s1; Vector s2; 4.结语 ✨使用C++模板,可以定义函数模板模板

    12710

    C++】C++11 新特性

    ) 等重大特性,还有对已有特性的更新:比如Lambda支持模板范围for支持初始化等 C++23 制定ing 二、C++11 简介 在2003年时 C++ 标准委员会曾经提交了一份技术勘误表 (简称...---- 十一、可变参数模板 1、可变参数模板的语法 在C语言中我们使用 … 来表示可变参数,比如 printf scanf 函数,C++ 中沿用了这个用法: 可变参数模板的形式 但 C++...---- 2、lambda 表达式函数对象 lambda 表达式仿函数一样,本质上也是一个可调用的函数对象,所以 lambda 表达式的使用方式仿函数完全相同;但仿函数不同的是,lambda 表达式的类型是由编译器自动生成的...,我们需要对该成员函数进行域的声明,并且还需要在域前面加一个取地址符,另外,成员函数又分为静态成员函数静态成员函数: 静态成员函数没有 this 指针,所以 function 实例化时不需要添加一个成员函数所属的类型参数...,在调用时也不需要传递一个成员函数所属的对象; 但静态成员函数有隐藏的 this 指针,所以需要传递这两个东西; 特别注意,这里传递的是的类型的对象,有的同学可能认为它们对应的是 this

    1.4K10

    C++学习】模板初阶&&STL简介

    2.4 函数模板的实例化 用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化显式实例化。 1....【专门的函数】可以一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个模板函数。...[_size++] = data; } 3.2 模板的实例化 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在 中即可。...C.模板的参数不是虚拟类型的,C++模板的声明格式为template<模板形参表声明><声明>,并且模板的成员函数都是模板函数。...Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

    9010

    c++ stl容器_c++ std是什么

    文章目录 C++中常用的std标准容器 顺序容器: 有序关联容器: 无序关联容器: 顺序容器 1. vector容器 a. vector的定义初始化 b. vecotr常使用的操作 c....它们包括: 顺序容器: vector string (它不是模板) list forward_list deque queue priority_queue stack 有序关联容器:...很多容器功能是重复的,不再一一列举 顺序容器 1. vector容器 a. vector的定义初始化 // T 表示实例化模板时使用的类型 vector v1    ...类似,但是string不是一种模板,而就是一种类型,因为它专门用于存放字符的(存放的元素类型已经明确),所以没有设计为模板。...pair类型为一个结构体类型的模板,(在c++中结构体,除了默认的访问符不同,没有其它任何区别) pair 有两个public的数据成员,分别为firstsecond. pair的初始化大多数结构体或的初始化相同

    66010
    领券