讓我們採取以下簡單的例子:如何讓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
,但它仍然有一些代碼味道給我。 (我想海灣合作委員會強迫我施放它)
有沒有辦法讓海灣合作委員會警告呢?
'uint32_t'可以在沒有任何數據丟失的情況下轉換爲'uint64_t' - 爲什麼編譯器會提醒你? –
因爲它有味道。這是一個隱含的轉換。 –
'uint32_t i = 1;'也是一種隱式轉換。 C++一直在做。除非有數據丟失的可能性,否則沒有任何問題。 –