首页 > 解决方案 > 未为 std::string 定义三向比较运算符 (<=>)

问题描述

我试图在我的程序中使用 c++20 的新三向运算符(<=>)功能,但似乎这个运算符不是为字符串定义的,因为这个程序

#include <compare>
#include <string>

using namespace std;

int main()
{

    string a = "a";
    string b = "b";
    auto x = (a <=> b);

    return 0;
}

产生此错误:

Error   C2676   binary '<=>': 'std::string' does not define this operator or a conversion to a type acceptable to the predefined operator

但是根据cppreference,这个操作应该是在c++20中定义的:https ://en.cppreference.com/w/cpp/string/basic_string/operator_cmp

三向比较运算符适用于原始类型,因为将前两个变量更改为 int 编译没有问题,另外默认实现的三向比较运算符与类正确工作,但仅当这些类仅包含原始类型时。std::vector 也发生了同样的问题,据我所知,它应该支持三向比较运算符。

我正在使用 cmake,据我所知,我已将标准正确设置为 C++ 20

cmake_minimum_required (VERSION 3.8)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)

我在visualstudio中使用MSVC编译

标签: c++cmakec++20default-comparisons

解决方案


推荐阅读