考虑下面的类,就像一个简单的例子:
#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;
}
};
应该直接调用转换操作员,还是直接调用static_cast
并让其完成工作?
这两行几乎会做完全相同的事情(即调用转换运算符),据我所知,它们的行为之间没有真正的区别。所以这里真正的问题是这是否正确。尽管这些对我来说似乎相同,但仍然可能存在细微的差异,人们可能无法理解。
那么除了它们的语法不同之外,这些方法(包括可能不适用于本示例的方法)之间是否存在任何实际差异?应该首选哪一个,为什么?