Tob*_*ght 29 c++ implicit-conversion
我的班级明确转换为bool:
struct T {
explicit operator bool() const { return true; }
};
Run Code Online (Sandbox Code Playgroud)
我有一个例子:
T t;
Run Code Online (Sandbox Code Playgroud)
要将它分配给类型的变量bool,我需要编写一个强制转换:
bool b = static_cast<bool>(t);
bool b = bool(t);
bool b(t); // converting initialiser
bool b{static_cast<bool>(t)};
Run Code Online (Sandbox Code Playgroud)
我知道我可以在没有强制转换的条件下直接使用我的类型,尽管有explicit限定符:
if (t)
/* statement */;
Run Code Online (Sandbox Code Playgroud)
我还可以t在bool没有演员阵容的情况下使用?
Tob*_*ght 40
该标准提到了值可以" 上下文转换为bool "的位置.它们分为四大类:
if (t) /* statement */;
Run Code Online (Sandbox Code Playgroud)for (;t;) /* statement */;
Run Code Online (Sandbox Code Playgroud)while (t) /* statement */;
Run Code Online (Sandbox Code Playgroud)do { /* block */ } while (t);
Run Code Online (Sandbox Code Playgroud)!t
Run Code Online (Sandbox Code Playgroud)t && t2
Run Code Online (Sandbox Code Playgroud)t || t2
Run Code Online (Sandbox Code Playgroud)t ? "true" : "false"
Run Code Online (Sandbox Code Playgroud)运营商需要constexpr为这些:
static_assert(t);
Run Code Online (Sandbox Code Playgroud)noexcept(t)
Run Code Online (Sandbox Code Playgroud)if constexpr (t)
Run Code Online (Sandbox Code Playgroud)NullablePointer T
Run Code Online (Sandbox Code Playgroud)
在标准要求满足此概念的pointer类型(例如,a 的类型std::unique_ptr)的任何地方,它可以在上下文中被转换.此外,一个NullablePointer平等和不等式运算符的返回值必须在上下文中可转换为bool.
std::remove_if(first, last, [&](auto){ return t; });
Run Code Online (Sandbox Code Playgroud)
在任何名为Predicate或者模板参数的算法中BinaryPredicate,谓词参数都可以返回一个T.
std::sort(first, last, [&](auto){ return t; });
Run Code Online (Sandbox Code Playgroud)
在调用模板参数的任何算法中Compare,比较器参数都可以返回a T.请注意,const和非const转换运算符的混合可能会导致混淆:
| 归档时间: |
|
| 查看次数: |
6303 次 |
| 最近记录: |