2015-06-03 103 views
2
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 
} 

兩者都可以成功編譯,但有什麼區別?我可以通過返回構造函數直接返回一個對象嗎?

+6

兩者都做同樣的事情,都是正確的。 – imreal

+1

如果您使用大括號初始化,那麼您的上一個函數可能會變爲'return {1,30,59}; //使用大括號' – NathanOliver

回答

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; 
} 
相關問題