vs 2015 constexpr变量不恒定,但与2019相比还好吗
vs 2015 constexpr variable non constant but fine on vs 2019?
我有一个简单的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
方面做得不好。
相关文章:
- 将公共但非静态的成员函数与ALGLIB集成
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 点云库在VS 2019中不起作用,但在VS 2017中确实有效
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 为什么 std::count 比 MSVC 编译器的普通循环慢,但与 GCC 相等?
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- Googletest 在 bazel test 中永远不会失败(在它应该失败的地方),但与 cmake & clion 一起工作
- 左值没有模板匹配 (&&),但与模板匹配 (T &&)?
- Boost Spirit代码,可与msvc编译,但与gcc编译错误
- C++指针给出数据类型为"int"的错误,但与"char"一起工作正常
- 使用Windows函数SendMessage会导致与MSVC发生链接错误,但与MinGW不发生链接错误
- 如果它不是json,但与json类似,如何使用boost进行解析
- 转换在Visual Studio 2015中是不明确的,但与clang无关
- 这看起来很相似,但与旧问题不同.给定一个大小为 n 的数组(允许重复的数字),找到缺少的 2 个数字
- libmysql mysql_real_connect与IP地址失败,但与本地主机工作
- MPI代码不工作与2个节点,但与1
- 基本的OpenGL程序崩溃,但与gdb一起工作