Avatar ·

unsigned int vs. size_t: qual a diferença e o que é melhor usar em C++?

Olá, colegas. Sou um desenvolvedor C++ iniciante e não consigo entender a diferença entre `unsigned int` e `size_t`. Ambos parecem ser tipos inteiros sem sinal, mas vejo constantemente que em lugares diferentes usam um ou outro. \n\nPor exemplo, estou escrevendo um programa simples para contar elementos em um vector:\n\n```cpp\n#include \n#include \n\nint main() {\n std::vector numbers = {1, 2, 3, 4, 5};\n unsigned int size = numbers.size(); // Compila, mas com warning?\n for (unsigned int i = 0; i < size; ++i) {\n std::cout << numbers[i] << std::endl;\n }\n return 0;\n}\n```\n\nO compilador emite um warning sobre incompatibilidade de tipos na comparação `i < size`, embora ambos sejam `unsigned int`. Mas se eu escrever `size_t size = numbers.size();`, tudo fica ok.\n\nTambém ouvi dizer que `size_t` pode ser de 64 bits em sistemas 64 bits, enquanto `unsigned int` tem apenas 32 bits. Isso é verdade? E se sim, o uso de `unsigned int` não levaria a erros ao trabalhar com grandes quantidades de dados?