在 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);