问题标签 [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.

0 投票
1 回答
300 浏览

c++ - 为什么 C++20 允许默认比较即使被删除也可以编译?

考虑以下代码:

clang 给出了一个很好的警告:

警告:显式默认的相等比较运算符被隐式删除 [-Wdefaulted-function-deleted] bool operator == (const B& other) const = default;

但我想知道为什么这个代码甚至被标准接受。我假设如果有人operator ==在他的非模板结构/类中默认了,他的意图是永远不会被删除operator ==

但这是具有一百万个极端情况的 C++,因此可能有充分的理由。也许不是特殊情况模板?

但是clang足够聪明,不会对这段代码发出警告......

...所以理论上标准可以做同样的事情。

0 投票
0 回答
123 浏览

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编译