C++ using关键字用法 _ 类型别名与命名空间引入【干货】

老伟大大_4085

老伟大大_4085

2026-04-12

432人浏览

原创

using支持模板别名、函数指针别名及继承访问控制,比typedef更灵活;慎用using namespace防命名冲突;配合auto可简化复杂类型推导。

c++ using关键字用法 _ 类型别名与命名空间引入【干货】

using 声明类型别名:比 typedef 更灵活

用 using 定义类型别名不是语法糖,它支持模板别名,typedef 做不到。比如想给函数指针或容器模板起个简短名字,必须用 using。

  • using StrVec = std::vector<:string>;</:string> —— 等价于 typedef,但更易读
  • template<typename t> using Vec = std::vector<t>;</t></typename> —— 模板别名,typedef 无法实现
  • using FuncPtr = void(*)(int); —— 函数指针别名,typedef void(*FuncPtr)(int); 写法更绕

注意:别名不创建新类型,只是同义词;不能用 using 给内置类型(如 int)起别名后做重载区分——编译器仍视其为原类型。

using 指令引入命名空间:小心污染作用域

using namespace std; 放在头文件里是危险操作,会导致所有包含该头文件的源文件都暴露 std 中所有名字,可能引发隐式冲突(比如你定义了 swap,又引入了 std::swap,ADL 可能调错版本)。

  • 只在 .cpp 文件最底部、函数外使用 using namespace xxx;,且仅限小范围、无歧义场景
  • 优先用 using std::vector; 或 using std::swap; 这种“using 声明”,只引入需要的符号
  • 在模板中慎用 using namespace,依赖查找(ADL)行为会变得不可预测

常见错误:error: reference to 'min' is ambiguous,往往就是多个 using namespace 同时拉进了不同 min 实现。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

using 继承控制访问权限:替代 public/private 继承的常用写法

在派生类中用 using Base::func; 可以把基类的私有/保护成员提升为当前类的指定访问级别,这是实现“接口继承 + 实现复用”的关键手段。

  • class Derived : private Base { using Base::public_func; }; —— 把基类公有函数变成派生类公有
  • using Base::operator=; —— 显式继承赋值运算符,避免编译器生成默认版本
  • 若基类有重载函数(如多个 print()),using 会把整组声明都带进来,不会只挑某个参数版本

陷阱:如果基类函数是 virtual,using 不会改变虚函数性质;但如果派生类自己定义了同名函数,又没加 override,可能意外屏蔽基类版本。

using 和 auto 的配合:简化复杂类型推导

auto 解决的是变量定义时的类型省略,而 using 解决的是类型命名和复用。两者常一起用,尤其在处理迭代器、lambda 类型、模板元编程结果时。

  • using It = std::vector<int>::const_iterator;</int> + for (It it = v.cbegin(); ...) 比反复写长类型清爽
  • lambda 类型无法显式写出,但可借 using 绑定:using Filter = std::function<bool>;</bool>,再传入 lambda
  • 不要试图用 using T = auto; —— 语法错误,auto 不能出现在 using 右侧

真正容易被忽略的是:当模板参数类型极深(比如 std::map<:string std::shared_ptr>>>::value_type</:string>),先用 using 拆解中间层,再用 auto 推导局部变量,比硬写或全靠 auto 更可控、更易调试。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2920

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

6084

49

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2984

5

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

1772

13

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

989

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2980

5

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.26

313

5

c语言typedef的用法
c语言typedef的用法

c语言typedef的用法有定义基本类型别名、定义结构体别名、定义指针类型别名、定义枚举类型别名、定义数组类型别名等。本专题为大家提供typedef相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.26

2872

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习