C++11使用using定义别名(替代typedef)

Posted 大1234草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11使用using定义别名(替代typedef)相关的知识,希望对你有一定的参考价值。

文章目录

把typedef丢进垃圾桶里

typedef用来给类型定义别名。从C++11开始,using可以用来给类型定义别名,它完全可以替代typedef

using除了提供类型别名的功能,还可以通过别名模版指代一族类型的名字。

关于using的介绍,可以参考下面连接:

下面是一个使用using的demo。以后(c++)编程,需要给类型定义别名,统统使用using

#include <iostream>

template<typename T>
using call_back = void (*) (T);

void print_int(int num) std::cout << num << std::endl;

int main(int argc, char* argv[])
    call_back<int> func = print_int;
    func(233);
    return 0;


查看当前编译器支持的C/C++标准

using的类型别名功能,从C++11标准才开始。所以,我们需要查看当前编译器支持的C/C++标准。

即使编译器支持了需要的C++标准,但也可能只是支持部分功能。C++编译器支持情况,可以参考:C++ 编译器支持情况表

至于查看当前环境的C++标准支持。

  • MSVC的C++标准查看方法:待。

  • gcc的C++标准查看方法:g++ -dM -E - < /dev/null | grep -e __cplusplus -e __STDC_VERSION__

  • clang的C++标准查看方法:clang -dM -E - < /dev/null | grep -e __cplusplus -e __STDC_VERSION__

上面命令的含义,我问了下chat-gpt,参数大体如下:

  • -dM:指示g++输出预定义宏的列表。(-d后面可以接不同的字母选项,如-da,-db等)
  • -E:指示g++对输入文件进行预处理,并将预处理输出写入标准输出。因为输入文件是从标准输入(即键盘)读取的,所以这里使用-表示输入文件是从管道中读取的。
  • < /dev/null:将/dev/null设备文件的内容作为标准输入传递给g++,以便不必输入任何内容。

我当前的环境支持到c++17。所以C++11的标准放心用。当然,最好是在编译中添加C++标准参数:

# cmake 
set(CMAKE_CXX_STANDARD 11)

以上是关于C++11使用using定义别名(替代typedef)的主要内容,如果未能解决你的问题,请参考以下文章

[C++11]使用using和typedef给模板定义别名

[C++11]通过using定义基础类型和函数指针别名

C++开发之using定义模板别名

C++开发之using定义模板别名

C++开发之using定义模板别名

第6课 类型别名和强枚举类型