2010-06-15 38 views

Trả lời

13

Đây là toán tử truyền. Bất kỳ lớp nào định nghĩa loại này đều có thể được sử dụng ở bất kỳ đâu cần std::string. Ví dụ:

class Foo { 
public: 
    operator std::string() const { return "I am a foo!"; } 
}; 
... 
Foo foo; 
std::cout << foo; // Will print "I am a foo!". 

Toán tử thường là ý tưởng tồi vì luôn có cách tốt hơn để đạt được kết quả tương tự. Trong trường hợp trên, bạn nên tắt định nghĩa operator<<(std::ostream&, const Foo&).

+9

Tôi phản đối cụm từ "luôn luôn", nó quá tuyệt đối. Tôi nghĩ "thường" sẽ là một thuật ngữ tốt hơn. –

+1

Martin, tôi không nói "luôn luôn". Tôi đã nói "gần như luôn luôn" mà không phải là tuyệt đối, và là, IMO, gần gũi hơn với sự thật hơn "thường". –

+10

Loki, bình luận của bạn quá tuyệt đối. Nên một * luôn luôn * tránh các thuật ngữ "luôn luôn", hoặc nên một * thường * tránh thuật ngữ "luôn luôn"? – Alyoshak

20

Đây là một conversion operator cho phép đối tượng được hiển thị rõ ràng hoặc ngầm hoàn toàn tới std :: string. Khi một diễn viên như vậy xảy ra, toán tử được gọi và kết quả của phép diễn là kết quả của lời gọi.

Ví dụ về diễn viên tiềm ẩn, giả sử bạn có một hàm được chấp nhận loại std::string hoặc const std::string&, nhưng không phải là loại đối tượng đã cho. Việc truyền đối tượng của bạn cho hàm đó sẽ dẫn đến toán tử chuyển đổi được gọi, kết quả được truyền cho hàm thay vì kiểu của bạn.

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