编译时间常数确定

时间:2018-11-26 04:27:53

标签: c++

您怎么知道在编译时某些东西是否是常量?

有一般规则吗?

例如虚拟调用,它们在编译时是否已知?

可以正确地说,任何需要堆内存分配的内容在编译时都不知道,因为内存仅在运行时分配。只有访问该内存及其值,才能知道其引用的对象

1 个答案:

答案 0 :(得分:5)

有很多方法,没有通用规则,除非编译器将它们“虚拟化”,否则虚拟调用通常不会。

根据“好像”规则,编译器可以在编译时解决的任何事情都可以在编译时完成。

此外,某些操作很难在编译时执行,例如评估非类型模板参数。 C ++标准具有constexpr规则,这些规则指示编译器在初始化非类型模板参数时必须允许哪种操作。这些constexpr规则很复杂,要提出SO答案要花很长时间。找到一本不错的C ++书。

但是重要的是要知道两种情况都是一样的。编译器可以在运行时自由执行任何操作; C ++解释器可以是合格的C ++编译器。

C ++指定在抽象计算机上运行的程序的行为,而不是硬件上实际发生的事情。