Last Updated: 2023-12-27 08:12:56 Wednesday
-- TOC --
所谓隐式的typedef,其实就是说,很多时候都不用再写typedef了。
struct就是默认public的class,不需要写typdef。enum进化成了scoped enum类型,使用enum class申明和定义,不需要typedef。union类型的定义,也不需要typedef。
都是class....都是object....有了名字,就成了type....C++ treats type tags as implicit typedef names.
还是来一段测试代码吧:
$ cat test_no_typedef.cpp
#include <cstdio>
struct ss {
int a;
int b;
};
enum class ee {
A=8,
B,
};
union uu {
char c;
int i;
};
int main(void) {
enum ee e = ee::A;
enum ee f = ee::B;
ss s{(int)e, (int)f};
printf("%d %d\n", s.a, s.b);
uu u{};
printf("%zu\n", sizeof(u));
u.c = 'p';
printf("%c\n", u.c);
u.i = (int)f;
printf("%d\n", u.i);
return 0;
}
都是type了,上面代码中的
enum ee e = ee::A
中的enum
可以不写的。
看不到typedef关键字了!
以上代码运行效果:
$ g++ -Wall -Wextra test_no_typedef.cpp -o test_no_typedef
$ ./test_no_typedef
8 9
4
p
9
C++是强类型的编程语言,enum中的值不能直接拿出来用了,上面的测试代码,用C的风格进行了转换,这非常不C++,但是兼容。
本文链接:https://cs.pynote.net/sf/c/cpp/202208201/
-- EOF --
-- MORE --