ada*_*603 4 c++ casting static-cast conversion-operator
考虑以下类,就像一个简单的例子:
#include <iostream>
#include <string>
using namespace std;
class point {
public:
int _x{ 0 };
int _y{ 0 };
point() {}
point(int x, int y) : _x{ x }, _y{ y } {}
operator string() const
{ return '[' + to_string(_x) + ',' + to_string(_y) + ']'; }
friend ostream& operator<<(ostream& os, const point& p) {
// Which one? Why?
os << static_cast<string>(p); // Option 1
os << p.operator string(); // Option 2
return os;
}
};
Run Code Online (Sandbox Code Playgroud)
是否应该直接调用转换运算符,或者只是调用static_cast并让它完成工作?
这两行几乎完全相同(就是调用转换运算符),就我所知,它们的行为没有真正的区别.所以这里真正的问题是这是否真实.虽然这对我来说似乎是一样的,但仍然可能存在一些人们可能无法接受的微妙差异.
那些方法之间是否有任何实际差异(包括可能不适用于此示例的方法),除了它们的语法不同的事实?应该首选哪一个?为什么?
那些方法之间是否有任何实际差异
在这种情况下,不是我所知道的,行为明智.
(包括可能不适用于此示例的那些)
static_cast<X>(instance_of_Y)如果X有类型的转换构造函数,也会允许转换Y.对(可能不存在的)转换运算符的显式调用Y无法使用上述转换构造函数.在这种情况下,当然std::string没有转换构造函数point.
因此,演员表更通用,这是我一般喜欢的.另外"转换这个对象类型string"是不是更有意义"呼叫接线员string()".但是如果出于一些非常奇怪的原因你想避免使用转换构造函数,那么显式调用转换运算符就可以实现这一点.