C++11新特性 ——using ... = ...(持续更新中...)

系列文章目录

C++11关键字using
C++11关键字auto
C++智能指针unique_ptr
C++智能指针shared_ptr/weak_ptr

前言

C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。

1998 年,C++ 标准委员会发布了第一版 C++ 标准,并将其命名为 C++ 98 标准。据不知名人士透露,《带注释的C++参考手册》这本书对 C++ 98 标准的制定产生了很大的影响。

经过作者的不断迭代,一本书往往会先后发布很多个版本,其中每个新版本都是对前一个版本的修正和更新。C++ 编程语言的发展也是如此。截止到目前(2020 年),C++ 的发展历经了以下 3 个个标准:

2011 年,新的 C++ 11 标准诞生,用于取代 C++ 98 标准。

2014 年,C++ 14 标准发布,该标准库对 C++ 11 标准库做了更优的修改和更新;

2017 年底,C++ 17 标准正式颁布;

虽然学习 C++11 需要花些时间,但这是非常值得的;C++11 非常实用,它不但提高了开发效率,还让程序更加健壮和优雅。程序员应该乐于升级换代已有的知识,而学习和使用 C++11 早就是大势所趋。

一、C++11中using的使用

在最开始学习C++的时候,using最广为人知的用法肯定是作为命名空间的使用,例如using namespace std;,它在C++11中又引入了两种最新的用法:

1.在子类中引用基类的成员

举例子类私有继承父类,我们都知道私有继承会继承父类public和protected部分为子类的private成员,这意味着无法使用子类对象直接调用父类成员。

但是使用using可以访问

class father {
    
    
public:
    father() :value(55) {
    
    }
    virtual ~father() {
    
    }
    void test1() {
    
     cout << "father test1..." << endl; }
protected:
    int value;
};

class son : private father {
    
    
public:
    using father::test1;
    using father::value;
    void test2() {
    
     cout << "value is " << value << endl; }
};

int main(int argv, char* argc[])
{
    
    
    son son;
    son.test1();
    son.test2();
}

2.using定义别名

大家都知道,在 C++ 中可以通过 typedef 重定义一个类型:

typedef unsigned int uint_t;

但是面对以下例子,是不是就会感觉开始比较难看了,我们实际上就是想定义一个函数指针而已。

typedef void (*Fun) (int, const std::string&);

如果使用using的话,这样看起来是不是就比较直接了

using Fun = void (*) (int, const std::string&);

二、进阶使用别名

使用using定义别名看起来和typedef用法差不多,但实际上typede无法重定义模板
例如:
现在有模板

template<typename T>
typedef map<std::string, T> mapT;

我们想这样定义typedef map<std::string, T> mapT;实际就想定义一个key为string类型,但是value类型不确定的模板,但是这是错误的,因为此时T对于typedef是不确定的类型,如果真的想强行使用的话,就需要写成这样

template <typename T>
struct str_map
{
    
    
    typedef std::map<std::string, T> mapT;
};
str_map<int>::mapT map;

但是如果使用using的话,就可以很容易对模板进行重定义


template<typename T>
using mapT = map<std::string, T>;

总结

仍在持续更新中~
如果对您有所帮助,请点个赞!
未经允许,禁止转载!

猜你喜欢

转载自blog.csdn.net/qq_42956179/article/details/115386379
今日推荐