我可以通过返回构造函数直接返回对象吗?


class time
{
    public:
    time(int i, int j, int k)
    {
        hour = i, minute = j, second = k;
    }
    private:
    int hour, minute, second;
}
time return_an_object_1 (void)
{
    return time(1, 30, 59);  // Using parentheses
}
time return_an_object_2 (void)
{
    return time{1, 30, 59};  // Using curly bracket
}

都可以成功编译,但有什么区别呢?

在这种情况下,它们是相同的,但情况并非总是如此。它们可以是同一类的不同构造函数。在下面的例子中,类的行为取决于它的构造方式:

#include <iostream>
#include <initializer_list>
class Foo {
public:
   Foo( int a, int b, int c) {
      std::cout << "1" << std::endl;
   }
   Foo( std::initializer_list<int> data) {
      std::cout << "2" << std::endl;
   }
};
int main() {
   Foo f(1, 2, 3);
   Foo o{1, 2, 3};
   return 0;
}

最新更新