正确的方式来定义类型(typedef vs #define)

哪些方法对于定义变量类型更安全? 我知道当我们看到#define时,我们都皱着眉头,但它看起来和typedef一样工作:

这种方式有没有优势,如果有的话,它会是什么?

方法一:

    #include <iostream>

    #define byte unsigned char

    int main() {
        byte testByte = 'A';
        std::cout << testByte << std::endl;

        return 0;
    }

方法二:

     #include <iostream>

     int main() {
        typedef unsigned char byte;

        byte testByte = 'A';
        std::cout << testByte << std::endl;

        return 0;
    }

你应该总是使用第二个(即typedef或using)。

尽量不要在c ++中使用宏,并且大多数情况下都可以避免。 在编译之前它们只是文本替换,而且更“危险”。 例如

#define byte_pointer unsigned char*
byte_pointer p, q; // only p is a pointer

实际上,只有一个例子是定义类型的一种方式,所以它们之间没有任何竞争。


#define byte unsigned char

在编译开始之前,这只会使代码中的所有byte都被unsigned char替换。 它没有定义类型。

声明int byte; 将变成int unsigned char; ,这是无稽之谈。


typedef unsigned char byte;

这定义了一个类型。 类型将受到语法规则,范围规则和所有可爱的东西的影响。

声明int byte; 仍然是int byte;的声明int byte; ,因为这里的byte是在变量名的空间中找到的。


using byte = unsigned char;

这是定义类型别名的“现代”方式,它比typedef语句(特别是对于更复杂的类型)语法更清晰。

它被引入是因为否则模板类型别名的新语法几乎不可能使理智。


使用#define不安全(请参阅其他答案)使用typedef是定义类型别名的常用方法。

还有新的“使用”语法

using MyByte = unsigned char;

看到这个答案的相关问题(typedef与使用)https://stackoverflow.com/a/10748056/446303

链接地址: http://www.djcxy.com/p/78653.html

上一篇: Proper way to define type (typedef vs #define)

下一篇: Trouble understanding the C++11 syntax in the Rule of Zero