我正在阅读 documentation for std::any_cast
我觉得很奇怪,API 让转换要么返回一个值给持有的对象,要么返回一个指向它的指针。为什么不返回引用?每次使用非指针类型参数调用函数时都需要创建一个拷贝。
我可以看到指针版本的转换可能更能表明意图,也可能更清晰,但为什么不让返回值成为这样的引用呢?
template<typename ValueType>
ValueType& any_cast(any* operand);
代替
template <typename ValueType>
ValueType* any_cast(any* operand);
此外,即使您请求引用,强制转换也会删除引用并将拷贝返回到存储的对象,请参阅此处对函数重载 1-3 的返回值的解释 http://en.cppreference.com/w/cpp/utility/any/any_cast
最佳答案
你可以在这里看到关于 C++ 标准的讨论:https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/ngSIHzM6kDQ
请注意,十多年来,Boost 以这种方式定义了 any_cast
,而且它匹配 static_cast
和 friend 。因此,如果您需要引用,请执行以下操作:
any_cast<Foo&>(x)
与您在 C++ 中对较旧的 _cast
所做的相同。
关于c++ - `std::any_cast` 返回拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905868/