【问题标题】:constexpr function taking const char*constexpr 函数采用 const char*
【发布时间】:2020-02-13 13:01:03
【问题描述】:

我正在使用带有/std:c++17 的 MSVC v141 进行编译。

constexpr const char* test(const char* foo) {
    return foo + 1;
}

constexpr const char* bc = test("abc");

编译得很好,而

constexpr const char* test(const char* foo) {
    constexpr auto bar = foo;
    return bar + 1;
}

constexpr const char* bc = test("abc");

失败:

错误 C2131:表达式未计算为常量

失败是由于读取了超出其生命周期的变量

注意:查看 'foo' 的用法

这是正确的行为还是 MSVC 中的错误?

【问题讨论】:

标签: c++ constexpr


【解决方案1】:

对我来说似乎是预期的行为。用constexpr 声明的函数意味着它可以在编译时进行评估,但不是必须的。因此,您的函数在运行时评估时也应该是有效的。这是问题线

constexpr auto bar = foo;

因为它试图从非constexpr 对象创建constexpr 对象。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2015-07-02
    • 1970-01-01
    • 2013-12-19
    • 2013-09-29
    • 2016-07-13
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多