【发布时间】:2012-05-30 16:14:11
【问题描述】:
假设我用构造函数Foo(int) 编写了一个类Foo。
我有这段代码:
Foo a(i), b = a + Foo(2);
如果我在代码中使用常量调用构造函数,例如Foo(2),编译器是运行一次并存储运行时的结果,还是在运行时执行? struct/class是否只包含POD数据类型是一样的吗?
假设它在运行时执行(我相信是这种情况),有没有办法让它在编译时运行,或者具有与运行时相同的效果?
编辑:恐怕我没有说清楚。我指的是代码的Foo(2) 部分,它是完全不可变的。另外,我无法使用 C++11(我正在使用 GCC 4.1 并且无法升级),所以 constexpr 虽然有效,但不适合我。
【问题讨论】:
-
这是在全局范围内还是在函数中?
-
我正在考虑函数内部的情况。我担心必须多次评估
Foo(2)。 -
完全取决于编译器和优化级别。允许(如果这是问题的话)。它是否会取决于 Foo 是否有副作用,它的简单程度和其他因素。为什么不把它编译成汇编看看呢。
标签: c++ class struct initialization c++03