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

时间:2015-06-03 18:00:16

标签: c++ c++11

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
}

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

1 个答案:

答案 0 :(得分:5)

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

#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;
}