2010-12-13 38 views
5
class Foo 
{ 
friend class SquirrelVM; 
public: 
Foo() { cout << "Ctor" << endl; } 
virtual ~Foo() { cout << "Dtor" << endl; } 
Foo(const Foo & o) { cout << "const Ctor" << endl; } 

template <typename _ty> 
Foo(const _ty & val) { cout << "T const Ref" << endl; } 
template <typename _ty> 
Foo(_ty & val) { cout << "T Ref" << endl; } 
template <typename _ty> 
Foo(_ty * val) { cout << "T Ptr" << endl; } 
}; 

Foo CreateFoo() 
{ 
Foo ret; 
return ret; 
} 

int main(int argc, char* argv[]) 
{ 
Foo f = CreateFoo(); 
return 0; 
} 

đầu ra khác nhau giữa vs2005 và vs 2010. kết quả đầu ra dự kiến ​​là như thế này ..Template chức năng là khác nhau giữa vs2005 và VS2010

Ctor 
const Ctor 
Dtor 
Dtor 

đầu ra trên được rút ra nếu tôi xây dựng trong vs2005.

Nhưng, sản lượng VS2010 là không giống với ưu tiên

Ctor 
T Ref 
Dtor 
Dtor 

Tại sao mẫu chức năng của vs2005 là cao hơn so với chức năng bình thường trong VS2010?


[sửa] Nếu const là ommitted trên constructor sao chép, hơn dự kiến ​​sản lượng (đó là cùng với vs2005) đi ra. Có bất kỳ tác dụng phụ nào nếu hình thức của nhà xây dựng sao chép không giống với hình thức được đề xuất? hình thức được đề nghị .. Tôi có nghĩa là ... Foo(const Foo&); không Foo(Foo&);

Trả lời

6

Foo(_ty & val) với _tyFoo là một trận đấu tốt hơn bởi vì nó sẽ có tham số kiểu Foo& phù hợp với một tổ chức phi const Foo vế trái, trong khi người kia có một const rằng sẽ làm cho nó một trận đấu tồi tệ hơn một chút.

Đã có một số nhầm lẫn trong quá trình tạo C++ 0x và trước đó là liệu mẫu có thể được sử dụng để sao chép đối tượng của lớp sang loại lớp riêng của nó hay không. Ủy ban vừa mới tìm ra chúng want to stop the confusion về nó và cho phép một điều như vậy. VS2010 dường như phản ánh quyết định đó.

+0

Cảm ơn sự giúp đỡ của bạn. Vậy làm thế nào để giải quyết vấn đề đó? – codevania

+0

Vui lòng kiểm tra lại câu hỏi của tôi. Tôi đã chỉnh sửa. – codevania

+0

@codevania: Bạn cần sử dụng tham chiếu rvalue trong VS2010 và triển khai một hàm tạo di chuyển. – Puppy

Các vấn đề liên quan