这是运算符别名吗?
Is this operator aliasing?
我不明白typedef void (Testable::*bool_type)() const;
是什么意思适用于operator
是这样的代码
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
相当于
class Testable {
public:
void operator ()() const {
...
}
};
?
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
...定义了对bool_type
的隐式转换,这是一个指向成员类型的不可访问的指针。
这是一种 C++03 技术,用于提供对bool
的隐式转换,同时避免意外的隐式转换,特别是对于函数调用重载解析。返回的成员指针转换为 bool
,但不转换为可以想象用于函数参数的任何类型。相比之下,纯bool
结果将转换为例如 int
,并且 C++03 个 iostreams 使用的void*
结果将与void*
正式的参数相匹配。
对于 C++11 及更高版本,您将改为使用 explicit
,如下所示:
explicit operator bool() const { return whatever; }
但更好的是,定义一个命名转换函数,例如
auto is_empty() const -> bool { return whatever; }
这在C++03中通常也更好。
关于"这样的代码是否等同于......",不,不是。
相关文章:
- 部分定义/别名模板模板参数
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 如何在C++20中创建模板别名的推导指南
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 链表的这个别名运算符是否会产生深度复制
- 类型别名和运算符<<使用 ostream_iterator 重载会导致无效操作数
- 这是运算符别名吗?