问题标签 [default-comparisons]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么 C++20 允许默认比较即使被删除也可以编译?
考虑以下代码:
clang 给出了一个很好的警告:
警告:显式默认的相等比较运算符被隐式删除 [-Wdefaulted-function-deleted] bool operator == (const B& other) const = default;
但我想知道为什么这个代码甚至被标准接受。我假设如果有人operator ==
在他的非模板结构/类中默认了,他的意图是永远不会被删除operator ==
。
但这是具有一百万个极端情况的 C++,因此可能有充分的理由。也许不是特殊情况模板?
但是clang足够聪明,不会对这段代码发出警告......
...所以理论上标准可以做同样的事情。
c++ - 未为 std::string 定义三向比较运算符 (<=>)
我试图在我的程序中使用 c++20 的新三向运算符(<=>)功能,但似乎这个运算符不是为字符串定义的,因为这个程序
产生此错误:
但是根据cppreference,这个操作应该是在c++20中定义的:https ://en.cppreference.com/w/cpp/string/basic_string/operator_cmp
三向比较运算符适用于原始类型,因为将前两个变量更改为 int 编译没有问题,另外默认实现的三向比较运算符与类正确工作,但仅当这些类仅包含原始类型时。std::vector 也发生了同样的问题,据我所知,它应该支持三向比较运算符。
我正在使用 cmake,据我所知,我已将标准正确设置为 C++ 20
我在visualstudio中使用MSVC编译