`std::any_cast` returns 一个副本

`std::any_cast` returns a copy

我正在阅读 documentation for std::any_cast,我发现奇怪的是 API 强制转换 return 持有对象的值或指向它的指针。为什么不 return 参考?每次使用非指针类型参数调用函数时都需要进行复制。

我可以看到指针版本的转换可能更能表达意图,也可能更清晰,但为什么不让值 returned 像这样作为参考呢?

template<typename ValueType>
ValueType& any_cast(any* operand);

而不是

template <typename ValueType>
ValueType* any_cast(any* operand);

此外,即使您请求引用,强制转换也会删除引用,并且 return 是存储对象的副本,请参阅函数重载 1-3 的 return 值的解释这里 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 和朋友。所以如果你想要一个参考,这样做:

any_cast<Foo&>(x)

与您在 C++ 中为较旧的 _cast 所做的相同。