正确的方式来定义类型(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