Qualcuno mi fornisce un esempio per utilizzare il seguente costruttore int Qt?Chiunque mi fornisce un esempio per utilizzare QVector :: QVector (std :: initializer_list <T> args)?
QVector::QVector(std::initializer_list<T> args);
Qualcuno mi fornisce un esempio per utilizzare il seguente costruttore int Qt?Chiunque mi fornisce un esempio per utilizzare QVector :: QVector (std :: initializer_list <T> args)?
QVector::QVector(std::initializer_list<T> args);
Un costruttore che richiede un std::initializer_list
è considerato quando si utilizza lista-inizializzazione. Questa è un'inizializzazione che comprende un elenco di inizializzazione rinforzato:
QVector<int> v{1, 2, 3, 4, 5};
// or equivalently
QVector<int> v = {1, 2, 3, 4, 5};
Si noti che questa è una funzione di C++ 11. Infatti, la prima sintassi è nuova per C++ 11, mentre la seconda potrebbe essere stata utilizzata in C++ 03 per l'inizializzazione degli aggregati.
È inoltre possibile utilizzare inizializzazione diretta e passare il lista di inizializzazione come argomento:
QVector<int> v({1, 2, 3, 4, 5});
Dato che il costruttore non è explicit
, può essere utilizzato anche in altri modi interessanti:
Passando un argomento QVector
:
void foo(QVector<int>);
foo({1, 2, 3, 4, 5});
Tornando un QVector
:
QVector<int> bar()
{
return {1, 2, 3, 4, 5};
}
§8.5.4 Lista inizializzazione [dcl.init.list]:
Un costruttore è un inizializzatore-list costruttore se il suo primo parametro è di tipo
std::initializer_list<E>
o un riferimento a possibilmente qualificato cvstd::initializer_list<E>
per alcuni tipiE
, e anche lì non ci sono altri parametri o tutti gli altri parametri hanno argomenti predefiniti (8.3.6).
§13.3.1.7 inizializzazione di elenco-inizializzazione [over.match.list]:
Quando gli oggetti di tipo non-aggregato classe
T
sono elenco inizializzata (8.5.4), la risoluzione di sovraccarico seleziona il costruttore in due fasi:
Inizialmente, le funzioni candidate sono i costruttori inizializzatore-list (8.5.4) della classe
T
e la lista degli argomenti consiste nella lista di inizializzazione come un singolo argomento.[...]
Se una funzione ha un argomento QVector come 'Fun (QVector)', si può chiamare come 'Fun (QVector {1,2})' ? Grazie. –
user1899020
@ user1899020 Sì, è possibile. In effetti, questo costruttore di 'QVector' non è' explicit', quindi puoi anche fare 'Fun ({1, 2, 3})'. –
'QVector v {1, 2, 3, 4, 5}' anche non è necessario '()' come 'QVector v ({1, 2, 3, 4, 5})'.Se aggiungo(), penso che dovrebbe funzionare anche. Destra? –
user1899020