- Da dove proviene
size_t
quando non ho nulla incluso? - E 'ragionevole assumere sempre
size_t
==std::size_t
? - Quando utilizzare lo
size_type
nei contenitoristd
(string::size_type
,vector<T>::size_type
, ecc.)?
risposta
Da dove proviene size_t quando non ho nulla incluso in un progetto vuoto?
Se non si dispone di nulla incluso, non è possibile utilizzare size_t
. E 'definita a <stddef.h>
(e forse anche in <cstddef>
, se la versione di tale intestazione mette le definizioni nel namespace globale, così come std
).
È ragionevole assumere sempre size_t == std :: size_t?
Sì. Tutti i tipi e le funzioni definite dalla libreria C sono compresi nel std
spazio dei nomi, a patto che si include l'appropriato C++ di intestazione (ad esempio <cstddef>
piuttosto che <stddef.h>
)
Quando devo usare std :: _ :: size_type?
vuoi dire i size_type
tipi definiti in alcune classi standard e modelli, come vector
? Potresti usarli quando usi queste lezioni, se vuoi. Nella maggior parte dei casi, saprete che è lo stesso di size_t
, così si potrebbe anche utilizzare tale e risparmiare un po 'di battitura. Se si sta scrivendo codice generico, in cui non si sa ciò che la classe è, allora è meglio usare size_type
nel caso in cui non è compatibile con size_t
.
Per esempio, si potrebbe desiderare di scrivere un contenitore progettato per contenere più oggetti di quelli possono essere rappresentati da size_t
. È possibile utilizzare un tipo di tipo numerico grande per rappresentare la dimensione del contenitore, che non è convertibile in size_t
.In tal caso, il codice come size_t s = c.size()
non riuscirebbe a compilare - avresti invece bisogno di usare Container::size_type
.
Sul primo punto, posso usare size_t quando non ho incluso nulla. Per riferimento - sto usando VS2010. – David
@Dave: Questa è presumibilmente un'estensione di Microsoft per il linguaggio: ce ne sono molti. Prova a compilare con estensioni di lingua disabilitate. –
Hai ragione riguardo a cosa intendevo per 'std :: ____ :: size_type', ma puoi approfondire quando potrebbe essere 'incompatibile' con size_t, e la differenza tra ciò che rappresentano std :: size_t e :: size_type? – David
Da dove proviene size_t
quando non ho nulla incluso in un progetto vuoto?
size_t
è un tipo di meme intero senza segno base definito nella libreria standard di linguaggi C/C++. Si è definito in "stddef.h"
per C
e in <cstddef>
per C++
.
tipi definiti dal file di intestazione "stddef.h"
si trovano nel namespace globale, mentre <cstddef>
colpo di testa mette il tipo size_t
nello spazio dei nomi std
.
"stddef.h"
da C è incluso in C++ per compatibilità, e quindi il tipo si trovano sia nel namespace globale (::size_t
) e il std
namespace (std::size_t
).
size_t
è definito in <cstddef>
ed è nello spazio dei nomi std
.
Sarebbe bello (almeno per me imparare) se il downvoter ne spiega la ragione. – Sanish
- 1. 'size_t' vs 'container :: size_type'
- 2. C++ for-loop - size_type vs. size_t
- 3. size_t vs. uintptr_t
- 4. prestazioni std :: strstr vs. std :: string :: trovare
- 5. std :: unique_ptr vs std :: auto_ptr vs std :: weak_ptr vs std :: auto_ptr vs puntatori grezzi
- 6. int vs size_t su 64 bit
- 7. std :: mem_fun vs std :: mem_fn
- 8. std :: cin.getline() vs. std :: cin
- 9. Perché std :: count (_if) restituisce iterator :: difference_type invece di size_t?
- 10. printf vs. std :: cout
- 11. Lo standard C++ garantisce che std :: uintmax_t possa contenere tutti i valori di std :: size_t?
- 12. std :: unique_ptr :: release() vs std :: move()
- 13. std :: list vs std :: vector iteration
- 14. Differenza di using namespace (std :: :: vs std: :)
- 15. std :: this_thread :: yield() vs std :: this_thread :: sleep_for()?
- 16. Are uintptr_t e size_t same?
- 17. Differenza tra std: string e std :: string
- 18. Come gestire l'evoluto C++ std :: namespace? es: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs boost :: shared_ptr vs boost :: tr1 :: shared_ptr
- 19. ambiguo chiamata (conversione da char * a lambda vs std :: string)
- 20. Perché non è std :: string :: max_size() == std :: string :: allocator :: max_size()
- 21. std :: shared_ptr: reset() vs. assegnazione
- 22. Barton-Nackman vs std :: enable_if
- 23. :: tolower vs differenza std :: tolower
- 24. std :: vector vs normal array
- 25. std :: atomico | compare_exchange_weak vs. compare_exchange_strong
- 26. std :: wcstok in VS 2015
- 27. prestazioni di size_t in C++
- 28. Trasmetti da size_t a int o iterazione con size_t?
- 29. std :: copia a std :: cout per std :: coppia
- 30. Il costo dell'utilizzo di std :: map con std :: string keys vs int keys?
Sembra un compilatore specifico –
Puoi spiegare cosa hai osservato per il tuo primo punto? Per il tuo compilatore, 'size_t a;' funziona come una dichiarazione anche quando non hai '# include'd qualcosa? Dal momento che sembra essere una domanda su un'implementazione, potresti dirci quale implementazione stai utilizzando? –
@DavidThornley Questo è esattamente quello che vedo, sto usando VS2010 – David