首页 > 编程语言 > 详细

32.C++-11版本推荐使用using定义别名(替代typedef)虚函数之构造函数与析构函数分析

时间:2020-12-07 18:15:21      阅读:42      评论:0      收藏:0      [点我收藏+]

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

typedef unsigned int uint_t;

被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。

但是不能用于模版别名,所以C++11版本推荐,通过using来代替typedef

示例如下所示:

template<typename T>
class Test
{
public:
    Test()
    {
        std::cout << "A " << typeid(T).name() << std::endl;
    }
};

template <typename T>
using Using_T = Test<T>;

//template <typename T>
//typedef Test<T> Typedef_T;   //取消屏蔽后,这里将报错,不能用于模版别名,提示: a typedef cannot be a template

int main(int argc, char *argv[])
{
    Test<int> a1;
    Using_T<int> a2;
   // C<int> a3;        //这里会报错
    return 0;
}

除此之外,typedef还有个缺点,就是重定义函数指针时,会增加代码的阅读难度

比如:

typedef void (Typdf_ii)(int, int);       //声明函数
typedef void (*PTypdf_ii)(int, int);      //声明函数指针
typedef void (*PTypdf_iiArr[3])(int, int);   //声明函数指针数组
对应的using用法则是:
using Using_ii = void (int, int);    //声明函数指针
using PUsing_ii = void (*)(int, int);    //声明函数指针
using PUsing_iiArr = void (*[3])(int, int);    //声明函数指针数组
可以看到使用using, 通过赋值来定义别名,和我们平时使用变量类似,所以阅读比 typedef 更加清晰
示例如下所示:
#include <iostream>
using namespace std;
 
typedef void (Typdf_ii)(int, int);       //声明函数
typedef void (*PTypdf_ii)(int, int);      //声明函数指针
typedef void (*PTypdf_iiArr[3])(int, int);   //声明函数指针数组
 
using Using_ii = void (int, int);    //声明函数指针
using PUsing_ii = void (*)(int, int);    //声明函数指针
using PUsing_iiArr = void (*[3])(int, int);    //声明函数指针数组
 
void func1(int i, int j)
{
    cout<<"func1:"<<i<<","<<j<<endl;
}
 
void func2(int i, int j)
{
    cout<<"func2:"<<i<<","<<j<<endl;
}
void func3(int i, int j)
{
    cout<<"func3:"<<i<<","<<j<<endl;
}
 
int main(int argc, char *argv[])
{ 
    PTypdf_iiArr pTypedf={func1,func2,func3};
 
    PUsing_iiArr pUsing={func1,func2,func3};
 
    pTypedf[0](1,2);        //调用func1函数
    pUsing[1](2,3);          //调用func2函数
 
    return 0;
}

 

32.C++-11版本推荐使用using定义别名(替代typedef)虚函数之构造函数与析构函数分析

原文:https://www.cnblogs.com/lifexy/p/14098103.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!