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
:
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.
Sono abbastanza sicuro che il meglio che puoi fare a questo punto è quello di presentare un bug report. – zneak