vs 2015 constexpr变量不恒定,但与2019相比还好吗

vs 2015 constexpr variable non constant but fine on vs 2019?

本文关键字:2019 但与 constexpr 2015 变量 vs      更新时间:2023-10-16

我有一个简单的constexpr类(使用c++17(

struct foo {
float x, y;
// ill formed constexpr in vs 2015
foo() {}
constexpr foo(float x, float y) : x(x), y(y) {
}
};
constexpr auto bar() {
return foo(4.0, 5.0);
}
int main() {
auto f = bar();
}

这是2015年非constexpr默认构造函数的illform bc。但与2019年相比并没有什么问题。

根据这个参考页面,"所有选定的actor"必须是constexpr。我假设单词"selected"的意思是"used",即使默认的ctor是未使用的,2015也不会评估为constexpr,直到我使默认的ctorconstexpr。

其他规格的措辞不同,但我也无法弄清楚。此外,大多数constexpr示例在任何地方都使用关键字。一个选择性使用constexpr的例子会很好。

最新的GNU和Clang的表现与2019年类似,但我不相信这是2015年的疏忽或错误。

那是什么呢?所有的actor都应该是constexpr还是visualstudio2019在这里正确?

从来没有要求文字类型的所有构造函数都必须是constexpr。要求只是在常量表达式上下文中调用的所有函数都必须能够是常量表达式(因此必须声明为constexpr(。

请注意,Visual Studio的旧版本在正确实现constexpr方面做得不好。

相关文章: