我在编码时声明结构或类,因为它们基于现实世界的对象/想法/概念。
但通常这些结构/类只有一个成员。所以我想知道它是否有任何区别,如果我简单地制作一个typedef。
然后我不确定这是否正确,因为typedef不是'对象'在我看来。
我应该这样做:
struct Y { int x; }
或只是:
typedef int Y;
它有什么不同吗?我的结构图像是对象,typedef是否正确?
答案 0 :(得分:2)
有很大的不同。使用typedef以下所有内容均有效:
Y y = 14.3;
y += 7;
y = 1 + y << 3;
std::cout << y;
double d = y;
使用struct none,除非您选择公开这些操作。问题是,你有没有限制的int
,或者某种基于整数值的抽象,并且有自己的约束或不变量?
答案 1 :(得分:1)
您应该考虑以下几个方面:
typedef 只是该类型的另一个名称,即别名。
因此,如果您选择对基元使用 typedef ,您将能够执行所有基本类型操作(如加法,减法等):
Y y = 4;
y+=5;
printf("Y is %d", y);
相反,如果你选择使用 struct / class ,你将失去所有这些功能,你必须自己实现这些操作。
与结构不同的原始类型既不能补充也不能继承 因此,如果您计划从类型继承,或者使用其他字段对其进行补充,则应优先选择类而不是 typedef 。
class X : public Y { int x; }
正如我所提到的, typedef 是该类型的别名 因此,如果您希望您的类型获得与基本类型不同的ID,您绝对应该选择 struct / class :
typedef int Y;
typeid(Y)==typeid(int)
在这种情况下,表达式将为true。
struct Y { int x; }
typeid(Y)==typeid(int)
在这种情况下,表达式将为false。
答案 2 :(得分:0)
在大多数情况下,这种方式并不重要。重要的是,如果您需要基于Y
参数重载函数,或者您想要将自定义方法添加到(或覆盖运算符)Y
。 typedef
只是一个别名,因此就编译器而言typedef int Y
只是一个普通的int
,而struct Y
是它自己的不同类型。