Ik heb het geprobeerd:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size;
}
maar kreeg de fout:
cannot convert 'std::vector<int>::size' from type 'std::vector<int>::size_type (std::vector<int>::)() const noexcept' {aka 'long unsigned int (std::vector<int>::)() const noexcept'} to type 'int'
De uitdrukking casten naar int
als volgt:
#include <vector>
int main () {
std::vector<int> v;
int size = (int)v.size;
}
levert ook een fout op:
error: invalid use of member function 'std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]' (did you forget the '()' ?)
Laatste poging:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size();
}
die me gaf:
warning: implicit conversion loses integer precision
Hoe kan ik dit oplossen?
Antwoord 1, autoriteit 100%
In de eerste twee gevallen bent u gewoon vergeten de lidfunctie aan te roepen (!, het is geen waarde) std::vector<int>::size
als volgt:
#include <vector>
int main () {
std::vector<int> v;
auto size = v.size();
}
Uw derde oproep
int size = v.size();
triggert een waarschuwing, omdat niet elke geretourneerde waarde van die functie (meestal een 64-bits niet-ondertekende int) kan worden weergegeven als een 32-bits ondertekende int.
int size = static_cast<int>(v.size());
zou altijd netjes compileren en vermeldt ook expliciet dat uw conversie van std::vector::size_type
naar int
bedoeld was.
Merk op dat als de grootte van de vector
groter is dan het grootste getal dat een int
kan vertegenwoordigen, size
een implementatie zal bevatten die is gedefinieerd ( de facto vuilnis) waarde.