是否可以在 g++ 或 clang 中启用从 int 到 int64_t 的转换警告? 示例:
int n;
cin >> n;
int64_t power = (1 << n);
我希望编译器在第三行告诉我这个转换。
最佳答案
你可以在这些行上构建一些东西:
struct my_int64
{
template<class Y> my_int64(const Y&)
{
static_assert(false, "can't do this");
}
template<> my_int64(const long long&) = default;
/*ToDo - you need to hold the data member here, and
supply necessary conversion operators*/
};
然后
int n = 3;
my_int64 power = (1LL << n);
编译,但是
my_int64 power = (1 << n);
不会。从这个意义上说,这是一个很好的起点。您可以破解预处理器以使用它代替 int64_t
。
如果你想要一个警告而不是一个错误,你可以用
替换static_assert
my_int64 x{}; Y y = x;
并且希望编译器针对缩小转换发出警告,并相信它会优化这两个语句,因为它们共同为否-op.
关于c++ - 如何在 gcc 或 clang 中启用从 int 到 int64_t 的转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214312/