小编Kar*_*yan的帖子

constexpr,或者不是 constexpr,这是个问题

constexpr在 C++中玩弄并注意到我希望理解的奇怪行为。考虑来自标准 5.19 部分的这段代码。

constexpr int f1(int k) {
    constexpr int x = k; // error: x is not initialized by a
                         // constant expression because lifetime of k
                         // began outside the initializer of x
    return x;
}
Run Code Online (Sandbox Code Playgroud)

作为错误状态,生命周期k在 的初始值设定项之外开始x,因此我们不能确定这x 将是一个常量表达式。

这里是相同功能的另一个版本。

constexpr int f1(int k) {
    return k;
}
Run Code Online (Sandbox Code Playgroud)

这个很好用,很好用。所以问题是,为什么这里的生命周期也k开始于返回值的初始值设定项之外,或者不是,或者这是因为 RVO 并且从技术上讲,如果只是遵循标准,这也应该是一个错误?

还有另一个问题,这个问题实际上是从这个问题产生的。我正在尝试编写constexprIPv4 类。为此,我使用了带有std::string_view. 所以我能够在编译时使用 gcc 10.3 和 -std=c++20

constexpr IPv4 myIP{"192.168.0.0"};
constexpr size_t …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++20

1
推荐指数
1
解决办法
86
查看次数

标签 统计

c++ ×1

c++20 ×1

constexpr ×1