我希望这不是一个问题本身的重复,但搜索词是如此模棱两可,我想不出更好的。
假设我们有两个类:
class FloatRect
{
float x,y,width,height;
};
还有别的地方
class FloatBox
{
float top,left,bottom,right;
};
从实际的Angular 来看,它们是相同的,那么编译器是否将它们都视为某种类型的typedef?
还是会产生两个独立的代码单元?
我很好奇,因为我想超越typedef,创建一些类型的变体来提高可读性。
但我不想重复。
6条答案
按热度按时间vh0rcniy1#
这完全取决于具体实现。
例如,我可以使用CLang / LLVM来同时说明这两个观点:
如果问题是关于:引入类似布局的类是否会产生开销,那么答案是否,所以编写您需要的类。
lokaqttq2#
它们是与编译器完全无关的类。
如果它们只是POD C结构体,它实际上不会为它们生成任何真实的的代码。(是的,有一个无声的赋值运算符和一些其他函数,但我怀疑是否会有代码实际编译来做这件事,如果使用它们,它只会内联它们)。
cqoc49vn3#
由于用作示例的类只在编译时相关,所以没有什么可复制或折叠的。运行时,成员变量只作为“在偏移量N处的值”访问。
j8yoct9x4#
当然,这与具体的实现有很大的关系。
这里的任何内部崩溃都将完全是编译器机制的内部崩溃,并且不会对生成的已翻译代码产生影响。
我想这是不太可能的,因为我能想到没有任何好处,并在几个方面,这将真正复杂的事情。
p1tboqfb5#
不,因为它们实际上是两种不同的类型。编译器必须以这种方式处理它们。不存在神奇的合并。
gmxoilav6#
不,它们不被视为typedef,因为它们是不同的类型,例如可以用于重载函数。
另一方面,类型中没有代码,因此没有可复制的内容。