2012-01-16 10 views
6

Sono assolutamente d'accordo sul modo in cui Xcode offre informazioni sulle possibili funzioni membro disponibili della lingua e preferiremmo usarlo rispetto, per esempio, al compagno di testo, se non per una stranezza che ho notato oggi.Sviluppo Xcode C++, necessario chiarimento

Quando string s = "Test string"; l'unico disponibile substr firma è quello indicato

enter image description here

Da quello che ho capito tuttavia, e ciò i see online la firma deve essere

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

Infatti s.substr(1,2); è sia capito che funziona in Xcode.

Perché non viene visualizzato quando provo a completare il metodo? (Ctrl-Space)

+0

Sono abbastanza sicuro che il meglio che puoi fare a questo punto è quello di presentare un bug report. – zneak

risposta

15

Xcode sta eseguendo correttamente il completamento, ma non è quello che ci si aspetta. In realtà hai risposto tu stesso alla domanda senza saperlo. La firma della funzione per string s' substr() metodo, proprio come lei ha detto, è:

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

Tutti gli argomenti di substr() hanno assegnazioni di default, quindi di Xcode, s.substr() (senza argomenti) è il completamento del codice valido da inserire in quanto è davveros.substr(0, s.npos). Puoi confermarlo con qualsiasi numero di funzioni standard di C++ con argomenti predefiniti. Il modo più semplice per vederlo è con qualsiasi costruttore di container STL.

Prendere ad esempio un vector. Sappiamo tutti che vectors può richiedere un Allocator, ma l'argomento predefinito assegnato a Allocator è "abbastanza buono" per la maggior parte degli usi casuali. Abbastanza sicuro, due delle firme per vector costruttori sono:

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

In entrambi i casi, l'argomento Allocator ha un incarico di default, e nel secondo, il valore di default T ha un'assegnazione predefinita. Ora, dare un'occhiata a ciò che suggerisce Xcode durante la costruzione di un vector:

Xcode 4.2.1 Code Completions for vector constructor

Il suggerimento senza lista di argomenti è realtà il costruttore che richiede solo un Allocator. Il suggerimento che richiede solo un è in realtà il costruttore che accetta uno size_type, T e Allocator.

A seconda di come si pensa, potrebbe trattarsi o meno di un bug Xcode. Idealmente, si desidera vedere i completamenti con argomenti predefiniti per funzioni più semplici come substr(), ma per i costruttori di contenitori STL probabilmente non si vorranno vederli. Forse potrebbe essere un'opzione, ma non mi aspetto di vederlo corretto. Però sarò felice di mandare un radar con te.

+1

+1 per una spiegazione eccellente. –

+0

Quindi è un altro bug in Xcode. – Florian

+0

Bug o funzionalità a seconda del comportamento che si preferisce. –