我正在学习 C++,我的老师写了这段代码:
我想知道为什么我们不写:
TPoint TObjetGraphique::getOrigine() const
{return origine;}
有什么区别吗?
最佳答案
教师代码中的类型转换完全没有意义
假设 origine
是 TPoint
类型。
如果 origine
的类型可以以任何方式转换为 TPoint
,那么显式转换也是毫无意义的。
如果该语法有原因,那么 TPoint
具有构造函数声明,例如
struct SomethingElse {
int a_;
int b_;
explicit SomethingElse(int a, int b) : a_(a), b_(b) {}
SomethingElse() = default;
};
class TPoint {
public:
explicit TPoint(SomethingElse rhs) : x_(rhs.a_), y_(rhs.b_) {
std::cout << "TPoint::TPoint(const SomethingElse& rhs)" << std::endl;
}
private:
int x_;
int y_;
};
int main() {
SomethingElse something;
// TPoint pt1({2,3}); // <<<<<<<<<< Fails
TPoint pt2(something);
}
这看起来很不寻常,但最终可以防止
TPoint
无意中从 SomethingElse
实例化(参见 Live Demo )。关于c++ - 方法返回的幕后是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47998765/