首页 > 其他分享 >using的使用

using的使用

时间:2023-12-06 15:15:59浏览次数:22  
标签:typedef int add func 使用 using type

文章参考:

爱编程的大丙 (subingwen.cn)

1. C++98

在C++11之前,using有两种用法:

  • 用来声明要使用的命名空间:

    using namesapce std;
    
  • 当子类重载父类的同名成员函数时,通过using继承父类的同名函数。

    #include <iostream>
    using namespace std;
    
    class Person{
    public:
        void show(){
            cout << "Person" << endl;
        }
    };
    
    class Male: public Person{
    public:
        using Person::show;				// 继承基类中的show函数
        void show(int a){
            cout << "Male:" << a << endl;
        }
    }
    
    int main(void){
        Male m;
        m.show();				// 调用从基类中继承的show
        m.show(12);				// 调用自身实现的show
    	return 0;
    }
    

2. C++11

在C++11中,using有了一个新的用法:为类型起别名

这一点typedef也可以做到,但二者有一些不同的地方:

语法不同:

  • typedef

    typedef int my_int;
    my_int a = 10;
    
  • using

    using my_int = int;
    my_int a = 10;
    

显然,using的语法更加符合人们的习惯。通过为函数指针起别名,我们可以更加清楚的发现这一点:

  • typedef

    int add(int a, int b){
    	return a + b;
    }
    typedef int(func_ptr*)(int, int);
    func_ptr = add;
    func_pte(1, 2);
    
  • using

    int add(int a, int b){
    	return a + b;
    }
    using func_ptr = int(*)(int, int);
    func_ptr = add;
    func_pte(1, 2);
    

为模板起别名时不同:

  • typedef:typedef无法直接重新定义一个模板,需要为其添加一个外敷类

    #include <iostream>
    #include <map>
    using namespace std;
    
    template <typename T>
    typedef map<int, T> type;		// error,c++不支持这种语法。
    
    template <typename T>
    struct MyMap{
        typedef map<int, T> type;		// 通过添加外敷类,typedef可以为模板起别名。
    };
    MyMap<string>::type mm;
    mm.insert(make_pair(1, "zhangSan"));
    
  • using:可以直接重新定义一个模板:

    template <typename T>
    using map<int, T> type;		// 正确
    type<string> mm;
    mm.insert(make_pair(1, "zhangSan"));
    

综上:可以看出在重新定义某些类型时(起别名),using相较于typedef更加便利。

标签:typedef,int,add,func,使用,using,type
From: https://www.cnblogs.com/beasts777/p/17879567.html

相关文章

  • 字符指针及其函数的使用
    字符指针一、字符指针的有关内容首先需要明确的是,字符串实际就是字符数组。比如说:charp="helloworld";实际上应该是:p={'h','e','l','l','o','','w','o','r','l','d','\0'......
  • 使用 maven 自动将源码打包并发布
    maven-source-plugin作用:在构建过程中将项目的源代码进行打包,并作为一个jar文件附着在主构件上,在pom.xml中添加如下内容,使用maven生成jar的同时生成sources包在pom中配置如下:<build><plugins><plugin><groupId>org.apache.maven.plugins</g......
  • Python学习前准备之Python环境安装和Pycharm使用
    【一】python解释器安装【1】Python官网https://www.python.org【2】Python各版本解释器官网https://www.python.org/downloads/【二】Windows系统安装Python解释器【1】下载Python版本解释器现在已经更新到了3.13版本的Python解释器,但是最新的解释器往往都会存在一......
  • vue 的标签内属性的各使用形式
    标签内属性形式在Vue中,v-xx、@xx和:xx是不同的语法形式,具有不同的用途和语义v-xx形式:这是用于注册或使用Vue提供的内置指令或自定义指令。v-是Vue指令的前缀,后面跟着指令的名称例如,内置指令:v-if可以根据条件控制元素的显示和隐藏,v-for可以用于循环渲染列表,......
  • .NET 6 使用Nlog 记录日志到本地并写入SQLserver数据库
    1.安装Nlog对应Nuget包版本NLog:5.0.4NLog.Database:5.0.4NLog.Web.AspNetCore:5.1.4Microsoft.Data.SqlClient:5.0.0(写入SQLServer数据库用的)2.建表SQLCREATETABLE[dbo].[NLog]( [Id][bigint]IDENTITY(1,1)NOTNULL, [Application][nvarchar](50)NOTNULL, [Lo......
  • libmodbus使用-windows
    如何在mingw环境下使用libmodbus库_哔哩哔哩_bilibili 1、打开mysw运行 >pacman-Sautoconf-wrapper 2、进入libmodubus目录运行>./configure ......
  • 使用SQL查询elasticsearch
    目录SQLRESTAPIkibanaDevToolsJava其他elasticsearchQueryDSL太难写了,所以我放弃啦......
  • Packet.dll使用错误报错——应用程序无法正常启动(0xc000007b)
    程序打开报错: 解决方案:替换Packet.dll 1 System32和SysWOW64在Windows操作系统中的反直觉存放 ......
  • Vue使用el-cascader实现地区选择器组件
    1.使用组件-效果展示(推荐)1.2安装组件依赖(默认是V6版本,旧版本V5.02)官方文档地址(二级联动,三级联动包含教程):https://www.npmjs.com/package/element-china-area-datanpminstallelement-china-area-data-Snpminstallelement-china-area-data@5.0.2-S1.3V6版本使用注......
  • Amazon Code Whisperer 的正式使用,全新 AI 代码工具等你发现!(内附详细安装步骤图解)
    文章作者:稚始稚终关于CodeWhispererCodeWhisperer,亚马逊推出的实时AI编程助手,是一项基于机器学习的服务,它可以分析开发者在集成开发环境(IDE)中的注释和代码,并根据其内容生成多种代码建议。开发者可以用自然语言(目前仅支持英语)描述他们想要实现的功能,例如“上传一个带有服务......