使用类型别名,例如使用 A = int(int)
using type alias such as using A = int(int)
例如,使用类型别名,我们可以引入新的类型别名
using A = int(*)(int);
类似于
typedef int(*A)(int);
我发现以下代码对于当前的C++编译器也是合法
的using A = int(int);
我想知道 A 的类型是什么以及如何使用它(我自己觉得它没有用(
这是代码,它适用于 gcc 6.3 和 clang 4.0
#include <iostream>
#include <functional>
#include <typeinfo>
#include <cxxabi.h>
using namespace std;
using A = int(int);
using B = int(*)(int);
int main(){
int status;
cout<<sizeof(A)<<endl; //Error in clang 4.0
cout<<sizeof(B)<<endl;
cout<<sizeof(function<int(int)>)<<endl;
cout<<typeid(A).name()<<endl;
cout<<typeid(B).name()<<endl;
cout<<typeid(function<int(int)>).name()<<endl;
cout<<abi::__cxa_demangle(typeid(A).name(), 0, 0, &status)<<endl;
cout<<abi::__cxa_demangle(typeid(B).name(), 0, 0, &status)<<endl;
cout<<abi::__cxa_demangle(typeid(function<int(int)>).name(), 0, 0, &status)<<endl;
return 0;
}
输出为
1
4
16
FiiE
PFiiE
St8functionIFiiEE
int (int)
int (*)(int)
std::function<int (int)>
A
如前所述int(int)
。
它是一个函数类型,而不是对象类型,因此您不能为其声明类型A
或 appysizeof
的对象(gcc 会向您发出警告(。但是,您可以使用A*
,这是一种普通的函数指针类型:
A* a = myfunc;
您还可以使用A
实例化模板,例如std::function<A>
.
using A = int(int);
引入函数类型的别名。这是一个不完整的类型,有一些很好的用途。为了更好地说明它,让我们选择一个更好的名称,例如ButtonFunction
:
-
声明函数:
ButtonFunction some_func; int main() { return some_func(0); } int some_func(int) { // *Definitions* must be with the prototype return 0; }
偶数成员函数:
class foo {
ButtonFunction mem_fun;
};
int foo::mem_fun(int) { return 0; }
函数的声明现在不仅仅是一个原型,它们展示了函数应该具有的目的。
创建指向函数的指针:
ButtonFunction* f_ptr = &some_func;
指向成员的指针包括:
ButtonFunction foo::* f_ptr = &foo::mem_fun;
这允许指针语义是显式的,而不是隐藏在别名后面。它适用于数据类型和函数类型。
- 用作模板的参数。比较
std::function<ButtonFunction>
和std::function<int(int)>
.哪一个更清楚函子的目的?
相关文章:
- 为什么 int 类型的枚举类值不能用作 int
- 如何将文本文件的特定行读取到 int 类型的数组中C++?
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 比较两个整数在C++中与未知 int 类型的相等性
- 二进制'operator+' 'int*'和'int*'类型的无效操作数
- 使用元编程选择 int 类型,将生成错误
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 复制初始化 - 从 'int' 类型转换为非标量类型
- 初始化cv :: mat ::具有int类型的定义大小的人
- 处理代码重新定义int类型(uint16_t,int16_t等),并不喜欢它
- 为什么没有"int"类型声明时输出不同?
- 在大型程序中将长变量更改为 int 类型
- 无法将 int 类型转换为时间类型(我的类类型)
- C++:无法在按位函数后将 int 类型设置为非标量
- 无法分配给INT类型的成员[10]
- C++ cin 将字符串读取到 int 类型中返回 0
- 为什么 decltype((i)) 是引用类型,而 decltype(i+0) 是 int 类型
- 使用4用于循环的4矩阵上的数组下标的“ int [int]类型”
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- 正在施放带有“ Int”类型的临时性