J'ai essayé:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size;
}
mais j'ai eu l'erreur:
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'
Transformer l'expression en int
comme ceci:
#include <vector>
int main () {
std::vector<int> v;
int size = (int)v.size;
}
génère également une erreur:
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 '()' ?)
Dernière j'ai essayé:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size();
}
qui m'a donné:
warning: implicit conversion loses integer precision
Comment puis-je réparer cela?
Dans les deux premiers cas, vous avez simplement oublié d'appeler réellement la fonction membre (!, Ce n'est pas une valeur) std::vector<int>::size
comme ça:
#include <vector>
int main () {
std::vector<int> v;
auto size = v.size();
}
Votre troisième appel
int size = v.size();
déclenche un avertissement, car toutes les valeurs renvoyées par cette fonction (généralement un entier non signé de 64 bits) ne peuvent être représentées par un entier signé de 32 bits.
int size = static_cast<int>(v.size());
toujours compiler proprement et explicitement que votre conversion de std::vector::size_type
à int
était prévu.
Notez que si la taille de vector
est supérieure au plus grand nombre que peut représenter int
, size
contiendra une valeur définie par l'implémentation (ordures de facto).