Tôi đã đọc câu trả lời cho số question và thấy rằng thực sự có phương thức gọi là length() cho chuỗi (tôi luôn sử dụng size()). Có lý do cụ thể để có phương pháp này trong lớp chuỗi? Tôi đọc cả MSDN và CppRefernce và họ dường như chỉ ra rằng không có sự khác biệt giữa size() và length(). Nếu đó là như vậy, không phải là nó làm cho khó hiểu hơn cho người sử dụng của lớp?std :: string length() và size() Các hàm thành viên
Trả lời
Theo documentation, đây chỉ là các từ đồng nghĩa. size()
phải phù hợp với các hộp chứa STL khác (như vector
, map
, , v.v.) và length()
phải nhất quán với khái niệm trực quan của hầu hết mọi người về các chuỗi ký tự. Mọi người thường nói về một từ, câu hoặc đoạn là chiều dài, không phải kích thước của nó, vì vậy, length()
có thể giúp mọi thứ dễ đọc hơn.
Ruby chỉ giống nhau, btw, cung cấp cả #length
và#size
là từ đồng nghĩa cho số mục trong mảng và băm (C++ chỉ làm nó cho chuỗi).
Người tối giản và những người tin rằng "nên có một, và lý tưởng chỉ có một, cách rõ ràng để làm điều đó" (như Zen của Python đọc) sẽ, tôi đoán, chủ yếu là đồng ý với những nghi ngờ của bạn, @Naveen, trong khi người hâm mộ của Perl "Có nhiều hơn một cách để làm điều đó" (hoặc cú pháp của SQL với một "từ tiếng ồn" tùy chọn vô giá trị cho ra một dạng khái niệm tương đương với một khái niệm) sẽ không nghi ngờ gì về Ruby, và đặc biệt là C++, 't đi đủ xa trong việc cung cấp dư thừa từ đồng nghĩa ;-).
Trong trường hợp này, nó là vô cớ. Ngữ pháp và cách sử dụng của Perl cho phép bạn thể hiện mọi thứ bằng cách sử dụng kiểu nào bạn thích. Có hai từ khác nhau cho cùng một thứ chỉ làm cho khó có thể tìm ra các thuật ngữ tìm kiếm trong Stackoverflow. –
chiều dài của chuỗi == bao nhiêu bit rằng chuỗi có, kích thước == kích thước của những bit, Trong chuỗi cả hai đều tương tự nếu người biên tập phân bổ kích thước của nhân vật là 1 byte
câu trả lời không chính xác. Xem tài liệu được liên kết trong câu trả lời được chấp nhận. –
- 1. std :: string :: length() vs std :: string :: kích thước()
- 2. std :: u16string, std :: u32string, std :: string, length(), size(), codepoints và ký tự
- 3. Tại sao `std :: string` lại có hàm` find` thành viên?
- 4. C++ std :: thread của hàm thành viên
- 5. Xử lý lệnh std :: string/std :: biến thành viên vectơ khi sử dụng boost :: singleton_pool
- 6. 'std :: string' không có thành viên mang tên 'trước'
- 7. chuyển đổi Rcpp :: CharacterVector thành std :: string
- 8. Chuyển đổi std :: string thành std :: vector <char>
- 9. Chuyển đổi std :: string thành số nguyên
- 10. std :: bind() - ing một hàm thành viên được bảo vệ cơ sở từ hàm thành viên của lớp dẫn xuất
- 11. Chuyển đổi QString thành std :: string
- 12. std :: string :: c_str() và temporaries
- 13. Chuyển đổi một void * thành std :: string
- 14. thành ngữ đúng cho phân std :: string
- 15. Chuyển đổi uint64_t thành std :: string
- 16. Kiểm tra nội dung chuỗi? string Length Vs Empty String
- 17. C++ các hàm và biến thành viên tĩnh
- 18. chuyển đổi std :: string thành basic_ostream?
- 19. Sử dụng lệnh std :: function/mem_fn trong C++ 11 với các hàm thành viên
- 20. lỗi C2039: 'find': không phải là thành viên của 'std'
- 21. Tìm hằng số của hàm thành viên
- 22. gọi std :: async chức năng thành viên
- 23. C++ printf với std :: string?
- 24. return std :: string/std :: list from dll
- 25. Các thành viên được tạo ngầm và không chấp nhận
- 26. Hàm con trỏ tới hàm thành viên
- 27. về hàm thành viên const
- 28. Con trỏ hàm thành viên
- 29. Gửi và nhận std :: string over socket
- 30. có thể sử dụng các hàm thành viên để khởi tạo biến thành viên trong danh sách khởi tạo không?
Đồng ý. Khi tôi viết các lớp mẫu và các hàm tôi muốn sử dụng 'size()' (Trong trường hợp tôi sử dụng các lớp không phải chuỗi), nhưng hầu hết thời gian tôi sử dụng 'length()' khi làm việc với các chuỗi đơn giản. – Marius
Không kích thước() trả về kích thước của chuỗi trong bộ nhớ (tính bằng byte), trong khi length() trả về số ký tự, chỉ xảy ra trùng với 1 char = 1 byte? –
No. Chúng có cùng chức năng; họ thậm chí chia sẻ tài liệu: http://en.cppreference.com/w/cpp/string/basic_string/size. – tgamblin