C++语法|using关键字


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 中的 value
    return 0;
}
//-----------------------------------------------//
//只需要命名空间中的特定元素
using std::cout;
using std::endl;

int main() {
    cout << "Hello, world!" << endl;  // 直接使用 std 的 cout 和 endl
    return 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均不能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值