gpt4 book ai didi

c++ - operator == overload not called for implied 'true' ?

转载 作者:行者123 更新时间:2023-11-30 00:42:57 25 4
gpt4 key购买 nike

我正在对 std::optional 进行子类化,需要删除 operator==(bool) 并实现我的自定义 operator==(enum)

要删除运算符,这行得通:

constexpr bool operator == ( bool ) noexcept = delete;

非常适合下面的代码,抛出“已删除的函数”编译错误

OptionalSubclass<int> ReturnEvens( int i ) { if ( i % 2 == 0 ) return i; return {}; }
:
:
auto result = ReturnEvens(42);
if ( result == true )
std::cout << *result << " is even" << std::endl;

但是,下面的代码,带有隐含的“真”,编译并执行

auto result = ReturnEvens(42);
if ( result )
std::cout << *result << " is even" << std::endl;

我应该删除其他运算符吗?

最佳答案

std::optional 有一个 operator bool()这允许将其转换为 bool 以在条件下进行评估。您还需要删除该运算符,以便它不能被隐式转换。

关于c++ - operator == overload not called for implied 'true' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57223656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com