gpt4 book ai didi

c++ - 方法返回的幕后是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:56:28 24 4
gpt4 key购买 nike

我正在学习c++,我的老师写了这段代码:

  • Tpoint and TObjetGraphique are two separated classes
  • origine is an object of type Tpoint declared private within TObjetGraphique

     TPoint TObjetGraphique::getOrigine() const
    {return (TPoint(origine));}

我想知道为什么我们不直接写:

TPoint TObjetGraphique::getOrigine() const
{return origine;}

有什么区别吗?

最佳答案

在你的老师代码中强制转换是完全没有意义的

TPoint TObjetGraphique::getOrigine() const
{return (TPoint(origine));}
// ^^^^^^^ ^ You can just omit this as proposed

假设 originTPoint 类型,如所述。


如果 origin 的类型可以以任何方式转换为 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);
}

这看起来很不寻常,但最终可以防止 TPointSomethingElse 无意中实例化(参见 Live Demo )。

关于c++ - 方法返回的幕后是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com