I tried:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size;
}
but got the error:
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'
Casting the expression to int
like this:
#include <vector>
int main () {
std::vector<int> v;
int size = (int)v.size;
}
also yields an error:
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 '()' ?)
Last I tried:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size();
}
which gave me:
warning: implicit conversion loses integer precision
How can I fix this?
In the first two cases, you simply forgot to actually call the member function (!, it's not a value)
std::vector<int>::size
like this:Your third call
triggers a warning, as not every return value of that function (usually a 64 bit unsigned int) can be represented as a 32 bit signed int.
would always compile cleanly and also explicitly states that your conversion from
std::vector::size_type
toint
was intended.Note that if the size of the
vector
is greater than the biggest number anint
can represent,size
will contain an implementation defined (de facto garbage) value.