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

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

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

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

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

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

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

相关·内容

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

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

30710

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

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

15210

【笔记】《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->调用函数->构造智能指针.

97130

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

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

1.2K30

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

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

1.7K20

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

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

1.1K20

PCL库中的C++特性

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

1.1K30

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

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

59020

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

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

10710

C++知识概要

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

1.1K20

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.3K10

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的初始化大多数结构体或的初始化相同

60010

模板初阶STL简介

函数模板的实例化: 用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化显示实例化。...: 1.一个模板函数可以一个同名的模板函数同时存在,而且该函数模板还可以被实例化为这个模板函数。...,编译器不需要特化 Add(1, 2); // 调用编译器特化的Add版本 } 2.对于模板函数同名函数模板,如果其他条件都相同,在调用时会优先调用模板函数而不会从该模板产生出一个实例...; } _size = _capacity = 0; } 模板的实例化: 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在即可,模板名字不是真正的...—标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构算法的软件框架。

36910

lnk2001 lnk1120_lnk1120

4.试图从基的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。   5.要注意函数变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。...函数内声明的变量(局部变量) 只能在该函数的范围内使用。   C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。...6.不同版本的库编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号说明。   7.在不同的模块使用内联内联的编译选项能够导致LNK2001。...导致 LNK2019 的常见问题有: 符号声明包含拼写错误,以致于符号声明符号定义不同。 使用了一个函数,但其参数的类型或数量函数定义不匹配。...在 Visual Studio .NET 2003 中,必须定义声明新的模板函数的友元声明。

94820

C++系列(合集)】特性多又复杂?不存在!——这篇C++大全直接干碎(超级大全,精讲)

(个数,类型,类型顺序)不同 注意点:对 返回值 没有要求 ,注意声明!...free,free不同之处在于他会调用析构函数 实例分析:(顺序) 在下图中,new了一个栈Stack,其实底层是先malloc个空间给Stack(自定义类型),再调用它的拷贝构造(_array...= temp; } //可识别不同的同种类型交换(例:charchar,intint,doubledouble) PS:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用...一个模板函数可以一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个模板函数 对于模板函数同名函数模板,如果其他条件都相同,在调动时会优先调用模板函数而不会从该模 板产生出一个实例..., ..., class Tn> class 模板名 { // 内成员定义 }; 二.模板的实例化 模板实例化函数模板实例化不同模板实例化需要在模板名字后跟,然后将实例化的类型放在

12210

C++初阶】C++入门

class是一般的类型。struct在C++中是特殊的类型,声明中仅默认隐式的成员访问限定class不同(struct是public,class是private)。union是联合体类型。...对模板类型,可以在头文件中声明模板模板函数;在代码文件中,使用关键字export来定义具体的模板对象模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象函数。...>输入符号 endl在C++中就相当于换行的意思。...C语言最大的区别就是,C++的输入输出不需要去自行划分数据类型 C++中会自己识别比较方便。  缺省参数函数重载  缺省函数定义:   缺省参数是声明或定义函数时为函数的参数指定一个默认值。...函数重载概念:   函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题

1.2K30

【笔记】《深入理解C++11》(上)

POD需要满足以下条件: 平凡(Plain)限制: memset兼容的默认的构造析构函数 memcpy兼容的拷贝, 移动, 赋值, 移动赋值函数 不包含虚函数虚基 标准布局(Old)限制: 所有静态成员有相同的访问权限...(为了保证成员摆放的顺序一致) 派生静态成员时, 只有一个仅有静态成员的基(为了保证基能被直接折叠, 因为C没有继承关系) 基静态成员时, 派生没有静态成员(为了派生折叠, 因为C...没有继承关系) 中的第一个静态成员类型要与基不同(为了指针能直接指向第一个成员) 没有虚函数虚基 所有静态成员都满足POD布局(递归定义) 之所以C++11引入POD的概念是为了保证我们可以安全地用..., 例如当存在POD成员且这个成员有平凡的构造函数时, 这个union的默认构造将被删除 匿名的union对外是开放的, 因此放在的声明中可以按照构造函数的不同而初始化为不同的类型, 此时被称为枚举式的...auto禁止对结构体中的静态成员进行推导 不允许声明auto数组 新增的range-for语法要求目标有beginend函数, 且支持++==, 常auto共用, 但要注意range-for中的

1.7K20

Google C++ 编程风格指南(五):其他 C++ 特性

引入异常使得 C++ Python, Java 以及其它 C++ 的语言更一脉相承。 有些第三方 C++ 库依赖异常,禁用异常就不好用了。 异常是处理构造函数失败的唯一途径。...缺点: C++ 中整型大小因编译器体系结构的不同不同....类似的 bug 还会出现在比较有符合变量符号变量时. 主要是 C 的类型提升机制会致使无符号类型的行为出乎你的意料. 因此, 使用断言来指出变量为负数, 而不是使用无符号型!...考虑一下你们团队成员的平均水平是否能够读懂并且能够维护你写的模板代码.或者一个c++ 程序员一些只是在出错的时候偶尔看一下代码的人能够读懂这些错误信息或者能够跟踪函数的调用流程....由于友元函数/并不是的一部分,自然也不会是可调用的公有接口,于是我主张全集中放在的尾部,即的数据成员之后,参考 声明顺序 。 对使用 C++ 异常处理应具有怎样的态度? 非常值得一读。

1.1K30
领券