在 std::any 中存储一个无符号整数
Storing an unsigned integer in std::any
我可以让 ::std::any
保存一个无符号整数吗?类似于:
::std::any a = 4;
unsigned int x = ::std::any_cast<unsigned int>(a);
导致 ::std::bad_any_cast
异常,因为 a
实际上持有一个有符号整数。
是的,只需在其中输入一个无符号整数:
::std::any a = 4u;
// or
::std::any a = static_cast<unsigned>(4);
https://godbolt.org/z/vzrYnKKe9
我不得不提醒你。 std::any
并不是将 C++ 转换为 python 或 javascript 等动态类型语言的神奇工具。它的用例非常狭窄和具体。它并不是真的要在用户代码中用作“全部捕获”类型。它是低级库代码中 void *
的类型安全替代品。
因为4
默认是int
。
填写std::any
变量时需要指定unsigned:
std::any a = 4u;
unsigned int x = std::any_cast<unsigned int>(a);
我可以让 ::std::any
保存一个无符号整数吗?类似于:
::std::any a = 4;
unsigned int x = ::std::any_cast<unsigned int>(a);
导致 ::std::bad_any_cast
异常,因为 a
实际上持有一个有符号整数。
是的,只需在其中输入一个无符号整数:
::std::any a = 4u;
// or
::std::any a = static_cast<unsigned>(4);
https://godbolt.org/z/vzrYnKKe9
我不得不提醒你。 std::any
并不是将 C++ 转换为 python 或 javascript 等动态类型语言的神奇工具。它的用例非常狭窄和具体。它并不是真的要在用户代码中用作“全部捕获”类型。它是低级库代码中 void *
的类型安全替代品。
因为4
默认是int
。
填写std::any
变量时需要指定unsigned:
std::any a = 4u;
unsigned int x = std::any_cast<unsigned int>(a);