关于 stdint.h
中的那些定义,我想测试一个转换 int8_t
vector 或 int64_t
vector 的函数> 到 std::string
的 vector 。
这是我的测试:
TEST(TestAlgorithms, toStringForInt8)
{
std::vector<int8_t> input = boost::assign::list_of(-128)(0)(127);
Container container(input);
EXPECT_TRUE(boost::apply_visitor(ToString(),container) == boost::assign::list_of("-128")("0")("127"));
}
TEST(TestAlgorithms, toStringForInt64)
{
std::vector<int64_t> input = boost::assign::list_of(-9223372036854775808)(0)(9223372036854775807);
Container container(input);
EXPECT_TRUE(boost::apply_visitor(ToString(),container) == boost::assign::list_of("-9223372036854775808")("0")("9223372036854775807"));
}
但是,我在 visual studio 中收到一条警告:
std::vector<int64_t> input = boost::assign::list_of(-9223372036854775808)(0)(9223372036854775807);
如下:
warning C4146: unary minus operator applied to unsigned type, result still unsigned
如果我将 -9223372036854775808 更改为 -9223372036854775807,警告就会消失。
这里有什么问题?关于我的原始代码,测试是通过的。
最佳答案
就像编译器说的那样,-9223372036854775808
不是有效数字,因为 -
并且数字被分开处理。
你可以试试 -9223372036854775807 - 1
或使用 std::numeric_limits<int64_t>::min()
相反。
关于c++ - int8_t 和 int64_t 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033201/