C++语法|using关键字

ops/2024/9/23 6:36:00/

文章目录

  • 1.类型别名Type Aliases
  • 2.命名空间别名Namespace Aliases
  • 4. 模板别名
  • 5.命名空间声明 (Namespace Alias)
  • 与typedef的区别

using 关键字在 C++ 中有两个最主要用途:类型别名和命名空间声明。

1.类型别名Type Aliases

using 可以用来定义类型别名,这使得类型更易于管理和更具可读性。类型别名可以是指针、数组、函数指针等任何复杂的类型。使用 using 创建别名的语法比旧式的 typedef 更直观。例如:

using IntPtr = int*; //IntPtr 是指向 int 的指针的别名
using VecDbl = std::vector<double> //VecDbl 是 std::vector<double> 的别名IntPtr p = nullptr;  // 创建一个指向 int 的指针
VecDbl v = {1.0, 2.0, 3.0};  // 创建一个 double 类型的 vector

2.命名空间别名Namespace Aliases

如果你正在使用一个非常长的命名空间,可以使用using为其定义一个别名,简化代码。

namespace very_long_namespace {int func() {return 5;}
}// 定义命名空间别名
using vln = very_long_namespace;// 使用
int value = vln::func();

4. 模板别名

using 关键字支持模板化别名,这是 typedef 所不具备的。这使得 using 在泛型编程中尤其有用。例如,你可以定义一个模板化的类型别名来表示容器:

template<typename T>
using Vec = std::vector<T>;Vec<int> intVector;  // 等价于 std::vector<int>
Vec<double> doubleVector;  // 等价于 std::vector<double>

5.命名空间声明 (Namespace Alias)

在 C++ 中,using 关键字还可以用来引入命名空间,这样可以避免命名空间冲突和长命名空间前缀的重复编写。using 可用于导入整个命名空间或命名空间中的特定成员。例如:

namespace MyNamespace {int value = 42;
}//导入整个命名空间
using namespace MyNamespace;
int main() {std::cout << value << std::endl;  // 直接使用 MyNamespace 中的 valuereturn 0;
}
//-----------------------------------------------//
//只需要命名空间中的特定元素
using std::cout;
using std::endl;int main() {cout << "Hello, world!" << endl;  // 直接使用 std 的 cout 和 endlreturn 0;
}

与typedef的区别

  • 语法更加清晰
    在 using 的语法中,别名放在左侧,类型放在右侧,这使得别名的定义看起来更像是一种赋值操作,更直观易懂。
typedef int* IntPtr;
typedef void (*FuncPtr)(double);
typedef std::vector<std::string> StringVector;using IntPtr = int*;
using FuncPtr = void (*)(double);
using StringVector = std::vector<std::string>;
  • using关键字可以声明模板、命名空间别名、导入命名空间,typedef均不能

http://www.ppmy.cn/ops/36328.html

相关文章

DigitalOcean 应用托管平台级更新:应用端到端运行时性能大幅改进

DigitalOcean 希望可以为企业提供所需的工具和基础设施&#xff0c;以帮助企业客户加速云端的开发&#xff0c;实现业务的指数级增长。为此 DigitalOcean 在 2020 年就推出了App Platform。 App Platform&#xff08;应用托管&#xff09; 是一个完全托管的 PaaS 解决方案&…

PMP的考试费用是多少啊?大概需要多少钱?

如何以最低的经济成本取得PMP证书呢&#xff1f;PMP的认证考试费用包括考试报名费、学习备考费用和续证费用三个部分。 考试报名费用 PMP考试费用&#xff1a;PMP普通申请者初次考试费用为固定3900元人民币&#xff0c;补考&#xff08;重考&#xff09;费用为2500元人民币。退…

vue3+vite+axios+ElementPlus+ElLoading简易封装

1.安装按需加载element-plus需要的依赖包 pnpm install element-pluspnpm install axios# 按需自动导入 pnpm install -D unplugin-vue-components unplugin-auto-import# 自动导入element-plus样式 pnpm install -D vite-plugin-style-import2.修改jsconfig.json {"com…

Nginx三大功能详解

文章目录 Nginx&#xff08;动静分离&#xff09;1.基本介绍2.需求分析3.思路分析4.先使用传统的方式1.配置win的tomcat1.webapps\search\cal.jsp2.webapps\search\image\cal.jpg3.启动tomcat&#xff0c;访问 http://192.168.200.1:8080/search/cal.jsp 2.配置linux的tomcat1.…

Android中TabLayout与ViewPager结合使用生命周期详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到教程 效果 使用的布局如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> …

文字转语音粤语怎么转换?6个软件教你快速进行文字转换语音

文字转语音粤语怎么转换&#xff1f;6个软件教你快速进行文字转换语音 当需要将文字转换为粤语语音时&#xff0c;可以使用多种工具和服务&#xff0c;这些工具可以帮助您快速而准确地实现这一目标。以下是六个非国内的语音转换软件&#xff0c;它们可以帮助您将文字转换为粤语…

如何使用KCF算法。

KCF&#xff08;Kernelized Correlation Filters&#xff09;算法是一种高效的目标跟踪算法&#xff0c;它结合了核技巧和相关滤波器的思想。以下是使用KCF算法进行目标跟踪的一般步骤&#xff1a; 初始化&#xff1a; 在视频的第一帧中&#xff0c;手动选择或自动检测要跟踪的…

vue2.0与vue3.0

这里写自定义目录标题 Object.definePropertycreateApp自定义指令更新to:bodydata多根节点组件、函数式组件一些其他与开发者关系较为密切的更新最具有颠覆意义的响应-组合 API数据传递demo Object.defineProperty 我们知道 Vue2 是响应式原理基于 Object.defineProperty 方法…