using和typename在C++中的用法

本文介绍了C++编程中关键字`using`的主要用途,包括类型别名在模板编程中的应用以及`typename`用于明确模板参数和模板类中的类型声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using关键字有两个主要用途:

        1.类型别名:使用using可以为类型创建新的名称,这在模板编程中尤其有用。

using integer = int;
integer a = 5; // 这里的integer就是int类型
 

        2.命名空间:using可以用来引入命名空间中的名字,或者是整个命名空间。

using namespace std; // 引入std命名空间
using std::cout; // 引入std命名空间中的cout名字
 

typename关键字主要用在模板编程中,用来表明一个名字是一个类型。这在处理模板参数时尤其重要。

template <class T>
class MyClass {
    typename T::SubType * ptr; // 这里typename用来表明T::SubType是一个类型
};

在这个例子中,typename用来指示T::SubType是一个类型。如果没有typename,编译器可能会误认为SubType是一个静态成员。

另外 模板中的模板类也可以使用typename,此时和class等价

template <class T, typename T2> // 这里typename用来表明T是一个类型,与前面的class等价
class MyClass {
    T:* ptr; 
};

### C++ 中 `using` 关键字的具体用法 #### 一、Using 指令 (Using Directive) 当程序中频繁使用某个命名空间中的名字时,可以通过 using 指令让该命名空间下的所有成员可以直接调用而无需前缀。例如: ```cpp #include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; } ``` 这里通过 `using namespace std;` 让标准库中的对象可以在后续代码里直接被引用而不必每次都加上 `std::` 前缀[^1]。 #### 二、Using 声明 (Using Declaration) 如果只需要引入特定的名字而不是整个命名空间,则可以采用 using 声明的方式。这种方式只导入指定的对象到当前作用域内,从而减少潜在冲突的风险并提高可读性维护性。比如: ```cpp namespace MathFuncs { double add(double a, double b); } // 只将add函数引入全局作用域 using MathFuncs::add; double result = add(3.0, 4.5); // 不需要再写MathFuncs:: ``` 此段代码展示了如何利用 using 声明仅把所需的部分带入当前上下文中,而非全部内容[^3]。 #### 三、结合类模板使用的场景 除了上述基本形式外,在处理复杂的泛型编程场合下,`using` 还能用于定义类型别名以及简化模板参数列表等高级特性上。如下所示是一个简单的例子: ```cpp template<typename T> class Container { public: typedef T value_type; // 定义value_type作为T类型的同义词 template<class U> struct rebind { typedef Container<U> other; }; }; // 使用using重定义更简洁的形式代替typedef template<typename T> using MyContainer = Container<T>; MyContainer<int> int_container; // 创建一个整数容器实例 ``` 这段代码片段说明了怎样借助 `using` 来创建更加直观易懂的新类型名称,并且支持更多现代C++特性的表达方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值