编译时间常数确定

  • 本文关键字:时间常数 编译 c++
  • 更新时间 :
  • 英文 :


如何知道某个东西在编译时是否为常量?

有一般规则吗?

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

说任何需要堆内存分配的东西在编译时都是未知的,因为内存只在运行时分配,这正确吗。只有访问这个内存及其值,它引用的对象才能被称为

有很多方法,没有一般规则,除非编译器"设置"虚拟调用,否则通常不会进行虚拟调用。

根据"好像"规则,编译器在编译时可以解决的任何问题都可以在编译时完成。

此外,某些操作在编译时很难不执行,比如评估非类型模板参数。C++标准有constexpr规则,这些规则规定了编译器在初始化非类型模板参数时必须允许的操作类型。那些constexpr规则是复杂的,并且放在SO答案中太长;找一本好的C++书。

但重要的是要知道,这似乎是双向的。编译器在运行时可以自由执行任何操作;C++解释器可以是一致的C++编译器。

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