gpt4 book ai didi

c++ - 在非 constexpr 函数上添加的 constexpr 限定符不会触发任何警告

转载 作者:行者123 更新时间:2023-11-27 23:44:36 26 4
gpt4 key购买 nike

当它被添加到非 constexpr 函数时,编译器似乎忽略了 constexpr 限定符。这是为什么?

以下代码可以正常编译并运行。

#include <iostream>
#include <string>
using std::string; using std::cout; using std::endl;

constexpr bool is_shorter(const string &lft, const string &rht) // this is not a constexpr function
{
return lft.size() < rht.size();
}

int main()
{
bool restul = is_shorter("Hello", "World!");
return 0;
}

最佳答案

发生这种情况的原因是因为标准允许它这样做。 [dcl.constexpr]/5

For a constexpr function or constexpr constructor that is neither defaulted nor a template, if no argument values exist such that an invocation of the function or constructor could be an evaluated subexpression of a core constant expression (8.20), or, for a constructor, a constant initializer for some object (6.6.2), the program is ill-formed, no diagnostic required.

因此,由于函数永远不可能是核心常量表达式,因此行为是未定义的,编译器不需要通知您。

关于c++ - 在非 constexpr 函数上添加的 constexpr 限定符不会触发任何警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635762/

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