Давайте рассмотрим следующий простой пример:Как gcc предупреждать о переходе от uint32_t к uint64_t?
#include <vector>
#include <cstdint>
using ::std::vector;
using ::std::uint64_t;
using ::std::uint32_t;
int main(int argc, char *argv[])
{
vector<uint64_t> v;
uint32_t i = 1;
v.push_back(i);
return 0;
}
Когда я скомпилировать его с:
g++ -std=c++11 -Wall -Wconversion -Wpedantic a.cpp
Я не получаю ошибки преобразования. Тем не менее, я хочу, чтобы gcc предупредил меня, потому что типы uint64_t
и uint32_t
не идеально подходят. Я полагаю, что uint32_t
вписывается в uint64_t
, но мне все еще не хватает запаха кода. (Я хотел бы, чтобы gcc заставил меня его лить)
Есть ли способ, чтобы gcc предупредил об этом?
'uint32_t' может быть преобразован в' uint64_t' без потери данных вообще - почему компилятор предупредил вас об этом? –
Потому что пахнет. Это неявное преобразование. –
'uint32_t i = 1;' также является неявным преобразованием. C++ делает это все время. В этом нет ничего плохого, если есть вероятность потери данных. –