让我们采取以下简单的例子:如何让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++一直在做。除非有数据丢失的可能性,否则没有任何问题。 –