【发布时间】:2013-04-16 09:20:23
【问题描述】:
关于在stdint.h 中找到的那些定义,我想测试一个函数,用于将int8_t 的向量或int64_t 的向量转换为std::string 的向量。
这是我的测试:
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,警告就会消失。
这里有什么问题?关于我的原始代码,测试通过了。
【问题讨论】:
-
您是否也尝试过-9223372036854775808ll?正如 Bo Persson 所建议的,无论如何你都应该使用 std:numeric_limits。
标签: c++