其中返回符合C++标准

which return comply with C++ standard

本文关键字:C++ 标准 返回      更新时间:2023-10-16
class A {};
class B 
{
public:
    B(const A& a, int i = 10) : m_a(a), m_i(i) {}
private:
    int m_i;
    A m_a;
};
B getB(void)
{
    //return B(A());  // Method one
    //return A();     // Method two
}
方法

一和方法二都通过了VS2010的编译。

问题1>哪个更好?

问题 2>如果除第一个参数之外的所有参数都具有默认值,隐式构造函数是否支持多个传入参数?

谢谢

两者都有效,并且都做同样的事情。我会使用第一个,因为我发现第二个令人困惑,但不同的人有不同的笔触。

编辑:实际上,我会做的不止于此。我会将B的构造函数标记为explicit,以防止使第二个构造函数编译的那种事情。

注意:我将避免在C++的方法签名中使用(void)

两者都是正确的。第一个显式创建B实例,第二个从A隐式创建B。我都不喜欢这些。它们只是增加了混乱程度,仅此而已。

我将构造

函数装饰为explicit,然后使用方法一作为唯一可用的方法:

class B {
public:
    explicit B(A const & a, int b = 10) : m_a(a), m_i(b) { }
    // ...
};
B foo()  { return B(A()); }

这样,您永远不会意外地从A构建B。如果 B 的构造函数很昂贵或可能会抛出,那么在代码中具有这种额外的刻意性可能有助于使其更具可读性和更不容易出错。