Xcode está realizando la finalización correctamente, pero no es lo que espera. En realidad, tú mismo has respondido la pregunta sin saberlo. La firma de la función de string
's substr()
método, al igual que usted ha dicho, es la siguiente:
string substr (size_t pos = 0, size_t n = npos) const;
Todos los argumentos a substr()
tienen asignaciones por defecto, por lo tanto, a Xcode, s.substr()
(sin argumentos) es la finalización de código válida para insertar porque es realmentes.substr(0, s.npos)
. Puede confirmar esto con cualquier cantidad de funciones estándar de C++ con argumentos predeterminados. El lugar más fácil para ver esto es con cualquier constructor de contenedor STL.
Tome por ejemplo un vector
. Todos sabemos que vectors
puede tomar un Allocator
, pero el argumento predeterminado asignado Allocator
es "lo suficientemente bueno" para la mayoría de los usos casuales. Efectivamente, dos de las firmas para vector
constructores son:
explicit vector (const Allocator& = Allocator());
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
En ambos casos, el argumento Allocator
tiene una asignación predeterminada, y en el segundo, el valor por defecto T
tiene una asignación predeterminada. Ahora, echar un vistazo a lo que sugiere Xcode cuando se construye un vector
:
La sugerencia sin lista de argumentos es en realidad el constructor que toma sólo un Allocator
. La sugerencia que toma solo size_type
es en realidad el constructor que toma size_type
, T
y Allocator
.
Dependiendo de cómo piense sobre esto, puede o no ser un error de Xcode. Idealmente, desea ver terminaciones con argumentos predeterminados para funciones más simples como substr()
, pero para los constructores de contenedor STL, probablemente casi nunca desea verlos. Tal vez podría ser una opción, pero no esperaría ver esto corregido. Sin embargo, afortunadamente duplicaría un radar contigo.
Estoy bastante seguro de que lo mejor que puede hacer en este momento es presentar un informe de error. – zneak