1

根据 cppreference.com,显式转换函数不能用于隐式转换。作为一个例子,他们有这个:

struct B
{
    explicit B(int) { }
    explicit B(int, int) { }
    explicit operator bool() const { return true; }
};
 
int main()
{
    ...
    if (b2) ;      // OK: B::operator bool()
    ...
}

我会认为'if(b2)'是一个隐式转换,因此无法使用显式转换函数。那么什么是不允许的隐式转换的例子呢?

4

2 回答 2

3

上下文转换

在以下上下文中,如果声明格式正确(即考虑显式转换函数,例如显式 T::operator bool() const;) ,则需要类型bool并执行隐式转换。bool t(e);这样的表达式 e 被称为在上下文中转换为 bool。

  • if、while、for 的控制表达式;
  • ...
于 2021-12-13T22:16:22.933 回答
0

从 C++ 17 标准(7 标准转换)

4 某些语言结构要求将表达式转换为布尔值。出现在这种上下文中的表达式 e 被称为在上下文中转换为 bool 并且当且仅当声明 bool t(e); 对于一些发明的临时变量 t (11.6) 是良构的。

宣言

bool t( b2 );

格式正确,因为使用了直接初始化。

于 2021-12-13T22:20:20.737 回答