您的位置:首页 > 财经 > 金融 > 十、C++11常用新特性—using

十、C++11常用新特性—using

2024/12/23 11:15:52 来源:https://blog.csdn.net/qq_45180349/article/details/140321608  浏览:    关键词:十、C++11常用新特性—using

using用于声明命名空间,使用命名空间也可以防止命名冲突,在程序中声明了命名空间后,就可以直接使用命名空间中的定义的类了,在C++11中using的使用更加灵活。

1.定义别名

在C++中定义可以使用typedef,格式如下:

//typedef 旧的类型名 新的类型名
typedef unsigned int uint_t;

使用using和其效果一样,但是格式有点区别,形式如下:

using 新的类型 = 旧的类型
//例子
using uint_t = unsigned int;

2.函数别名

typedef于using使用示例

//typedef方法
typedef int(*func)(int, double);//using方法
using func = int(*)(int, double);

上述使用效果是一样的,但是使用using定义函数指针别名的写法看起来非常直观,把别名强制分离到了左边,而把别名对应的实际类型放在右边,比较清晰,可读性比较好。

3.模板别名

使用typedef有一点限制,就是无法重定义一个模板,比如:

//我们需要定义不同类型的value值得map
typedef map<int, int> m1;
typedef map<int, string> m2;
typedef map<int, double> m3;
//这种情况下我们会不自觉得想到了模板
template <typename T>
typedef map<int, T> Map;   //这是错误的//typedef不支持给模板定义别名,如果使用需要套一层外敷类如:
template <typename T>
struct MyMap{typedef map<int, T> Map;   //这是错误的
}

通过上述发现上述typedef定义模板别名的时候存在限制。在c++11中,新增了一个特性就是可以通过使用using来为一个模板定义别名,形式如下:

template<typename T>
using Map = map<int, T>;

上述可以见using的可以很方便的给模板指定别名,是的编程变得灵活,看起来更加地简洁。

4.总结

注:using和typedef一样,并不会创建新的类型,他们只是给某个类型定义了新的别名。using相较于typedef的优势在于定义函数指针别名看起来更直观,并且可以给模板定义别名。 

----------------------------------------------------

上述如有错误欢迎大家指正。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com