2012-01-16 31 views
6

Tôi hoàn toàn thích cách Xcode cung cấp thông tin chi tiết về các chức năng thành viên có sẵn của ngôn ngữ và muốn sử dụng nó tương đối so với văn bản.Phát triển Xcode C++, cần làm rõ

Khi string s = "Test string"; chỉ sẵn substr chữ ký được như

enter image description here

Từ những gì tôi hiểu tuy nhiên, và những gì i see online chữ ký nên

string substr (size_t pos = 0, size_t n = npos) const; 

Thật vậy s.substr(1,2); được hiểu và hoạt động trong Xcode.

Tại sao nó không hiển thị khi tôi thử phương pháp hoàn chỉnh? (Ctrl-Space)

+0

Tôi khá chắc chắn rằng điều tốt nhất bạn có thể làm tại thời điểm này là gửi báo cáo lỗi. – zneak

Trả lời

15

Xcode đang thực hiện hoàn thành chính xác, nhưng đó không phải là những gì bạn mong đợi. Bạn đã tự mình trả lời câu hỏi một cách vô tình. Chức năng chữ ký cho string 's substr() phương pháp, cũng giống như bạn nói, là:

string substr (size_t pos = 0, size_t n = npos) const; 

Tất cả các đối số cho substr() có nhiệm vụ mặc định, do đó để Xcode, s.substr() (không có đối số) là việc hoàn thành mã hợp lệ để chèn vì nó là thực sựs.substr(0, s.npos). Bạn có thể xác nhận điều này với bất kỳ số lượng hàm C++ chuẩn nào với các đối số mặc định. Nơi dễ nhất để thấy điều này là với bất kỳ nhà xây dựng container STL nào.

Ví dụ: vector. Chúng ta đều biết rằng vectors có thể mất Allocator, nhưng đối số mặc định được gán Allocator là "đủ tốt" cho hầu hết các mục đích sử dụng thông thường. Chắc chắn, hai trong số những chữ ký cho vector nhà xây dựng là:

explicit vector (const Allocator& = Allocator()); 
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

Trong cả hai trường hợp, lập luận Allocator có một nhiệm vụ mặc định, và trong lần thứ hai, giá trị mặc định T có một nhiệm vụ mặc định. Bây giờ, hãy nhìn vào những gì Xcode gợi ý khi xây dựng một vector:

Xcode 4.2.1 Code Completions for vector constructor

Các gợi ý không có danh sách đối số là thực các nhà xây dựng mà chỉ mất một Allocator. Đề xuất chỉ mất size_typethực sự là hàm tạo cần có một size_type, TAllocator.

Tùy thuộc vào cách bạn nghĩ về điều này, nó có thể hoặc không thể là lỗi Xcode. Lý tưởng nhất, bạn muốn xem các hoàn thành với các đối số mặc định cho các hàm đơn giản như substr(), nhưng đối với các hàm tạo container STL, có thể bạn gần như không bao giờ muốn thấy chúng. Có lẽ nó có thể là một lựa chọn, nhưng tôi sẽ không mong đợi để thấy điều này sửa chữa. Dù vậy, tôi sẽ vui vẻ lừa một chiếc radar.

+1

+1 để có giải thích tuyệt vời. –

+0

Vì vậy, đó là một lỗi khác trong Xcode. – Florian

+0

Lỗi hoặc tính năng tùy thuộc vào hành vi bạn thích. –

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