關於在stdint.h
中找到的那些定義,我希望測試將int8_t
的向量或int64_t
向量轉換爲std::string
向量的函數。int8_t和int64_t的最小值
這裏是我的測試:
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。 –