gpt4 book ai didi

C++:类/结构是否在编译时初始化过?

转载 作者:行者123 更新时间:2023-11-30 00:38:30 24 4
gpt4 key购买 nike

假设我编写了一个带有构造函数Foo(int) 的类Foo。我有这段代码:

Foo a(i), b = a + Foo(2);

如果我用常量调用代码中的构造函数,例如Foo(2),编译器运行一次并存储结果供运行时使用,还是在运行时执行? struct/class只包含POD数据类型是否一样?

假设它在运行时执行(我相信是这种情况),有没有办法让它在编译时运行,或者具有与这样运行时相同的效果?

编辑:恐怕我没有说清楚。我指的是代码的 Foo(2) 部分,它是完全不可变的。此外,我无法使用 C++11(我正在使用 GCC 4.1,无法升级),因此 constexpr 虽然有效,但不适合我。

最佳答案

可以让您的a使用constant initialization,这是静态初始化,但要做到这一点:

  1. i 大部分是常量表达式
  2. Foo::Foo(int) 必须是 constexpr
  3. Foo:Foo(int) 使用的任何/所有其他函数/ctors 也必须是 constexpr

对于您的 b 情况几乎相同 - Foo(2) 必须是 constexpr,并且 Foo::operator+(Foo const &)Foo operator+(Foo const &, Foo const &) (无论你有什么)都必须是 constexpr .

常量表达式的定义在 C++11 标准的 §5.19 中,如果您想更详细地研究。我的直接猜测是,如果 Foo 相当简单,那么 a 可能是可行的,但我不太确定 b

关于C++:类/结构是否在编译时初始化过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10731381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com