C++中隐式的typedef

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可以不写的。

为什么是cstdio?

看不到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 --