如果我没有实例化枚举,只需要:
enum myEnum {val1 = 0,val2,val3};
我想知道所有编译器是否会执行所有代码并将val1,val2等替换为相应的数字。这意味着它不会在完成的程序中为它创建存储空间。实际上,无论你写val1,val2等等,最终结果都是常数值。
我不确定“实例化”是否是正确的词。此外,当我说它通过你的代码并替换东西时,我并不是说它会像预处理器阶段的宏替换那样粘贴它。感谢。
答案 0 :(得分:1)
枚举的枚举数是prvalues,因此当您在源代码中使用42
时,它类似于键入<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_1" />
</android.support.v7.widget.Toolbar>
等文字;你没有得到一个glvalue(它指的是存储实际值的内存中的位置)。编译器在程序中为枚举器保留空间是没有任何意义的,因为根据语言规则永远不会访问那些内存位置。
然后,你真的如此缺乏记忆力吗?
答案 1 :(得分:1)
该标准将枚举描述为:
[...]具有命名常量的不同类型。
因此,是 - 最终结果将是在您编写val1,val2等的任何地方取代的常量值。