C++关键字using
C++关键字using
1.命名空间的声明
指定命名空间后可以省略xxx::
的前缀;
比如 std::cout
;
只要添加了using namespace std
,可以直接写cout
;
但是这样会造成一些冲突,如果同名函数在不同命名空间类,会造成混乱;
2.子类中引用基类成员
原则:
1.基类中private成员,不可用using声明;
2.基类中protected成员,在子类中public下声明,可被子类对象访问,不能被父类对象访问;其他和封装规则相同;
3.基类中public成员,声明和基类中protected相同;
在继承时,如果是私有继承,子类可以通过using来声明基类中protected方法,不会编译出错;
私有继承有什么用,还未研究;
3.使用using起别名
相当于传统的typedef起别名;
typedef std::vector<int> intvec;
using intvec = std::vector<int>; //这两个写法是等价的
用来定义函数指针,做到左右分离,更清晰;
typedef void (*FP) (int, const std::string&);
using FP = void (*) (int, const std::string&);
对模板的别名,typedef需要包装一层,using可直接使用;
//using
template <typename T>
using Vec = MyVector<T, MyAlloc<T>>;
Vec<int> vec;
//typedef
template <typename T>
struct Vec
{
typedef MyVector<T, MyAlloc<T>> type;
};
Vec<int>::type vec;
使用typedef时,把这样的类型用在模板类或者进行参数传递的时候,你需要使用typename强制指定这样的成员为类型,而不是说这样的::type是一个静态成员亦或者其它情况可以满足这样的语法;
而using则没有这样的问题;
//typedef
template <typename T>
class Widget
{
typename Vec<T>::type vec;
};
//using
template <typename T>
class Widget
{
Vec<T> vec;
};
Life is too short for so much sorrow.
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0 许可协议。转载请注明来自 小紫苏!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)