2013-01-17 15 views
12

Tôi đã thấy mọi người xuất chuỗi khác nhau bằng cách sử dụng cả hai "< <" và "+".Sử dụng "<<" hoặc "+" để đặt các chuỗi lại với nhau khi sử dụng "cout"

cout << firstname << lastname << endl; 

so:

cout << firstname + lastname << endl; 

Là nó tốt hơn để sử dụng "< <" hay nó không làm cho nhiều sự khác biệt?

+3

Bạn cũng có thể làm bài kiểm tra nhanh hơn và đăng kết quả. – Csq

+0

Tôi giả sử bạn đang tham chiếu 'std :: string' cho' toán tử + 'nối? Điều này sẽ không hoạt động với nguyên 'const char *' s. – 0x499602D2

Trả lời

15

Chắc chắn, sử dụng << - nối chuỗi sẽ tạo bản sao của hai chuỗi được dán với nhau. Cho dù nó cũng phân bổ thêm bộ nhớ trên đầu là vấn đề làm thế nào các chuỗi được thực hiện trong thư viện C++, nhưng nếu tên đầu tiên và cuối cùng là "đủ dài" (lớn hơn 8-16 ký tự với nhau), thì rất có thể S alloc cấp phát bộ nhớ (và sau đó giải phóng nó một lần nữa khi bản sao tạm thời không còn cần thiết nữa).

Nhà điều hành << sẽ có rất ít chi phí so sánh, vì vậy không nghi ngờ gì là tốt hơn.

Tất nhiên, trừ khi bạn thực hiện hàng nghìn thứ này, có thể bạn sẽ không có sự khác biệt có thể đo lường được. Nhưng thật tốt khi không lãng phí chu kỳ CPU, bạn không bao giờ biết sử dụng tốt chúng có thể ở đâu khác ...;)

+0

Xem thêm: [bi quan trước] (http://books.google.co.uk/books?id=mmjVIC6WolgC&pg=PT90) – spencercw

19

Tôi sẽ nói tốt hơn là sử dụng << trong trường hợp cụ thể đó. Nếu không, kết nối trong một tạm thời mà có thể cấp phát bộ nhớ không có lý do chính đáng.

0

Cascading << là lựa chọn tốt hơn.

Để thực hiện, như những người đứng đầu khác được đề cập, nhà điều hành << không nhất thiết phải giới thiệu bất kỳ đối tượng tạm thời nào. Một tầngcó thể được coi là một đường ống.

Đôi khi, bạn không thể sử dụng + nếu toán hạng bên trái của bạn không phải là loại do người dùng xác định, trừ khi bạn cung cấp operator+ tương ứng. Ví dụ:

cout << "Hello, " << lastname << endl;// Works 
cout << "Hello, " + lastname << endl; // This won't work 
+2

Đối với dòng cuối cùng không hoạt động, nó sẽ yêu cầu thực thi kém kiểu chuỗi. Nó chắc chắn sẽ hoạt động với 'std :: string'. –

+0

Có, std :: string không có hỗ trợ đó. –

+0

@ K-ballo: Chính xác như được viết, dòng cuối cùng là const char [], và do đó nó không hỗ trợ toán tử + cout << std :: string ("Hello") + lastname << endl; sẽ làm việc – deworde