`std :: any_cast`返回一个副本

时间:2017-01-28 02:50:49

标签: c++ c++17 stdany

我正在阅读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

1 个答案:

答案 0 :(得分:7)

您可以在此处查看有关C ++标准的讨论:https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/ngSIHzM6kDQ

请注意,Boost已经用这种方式定义了async.each超过十年,而且它与iteratee和朋友匹配。因此,如果您想要参考,请执行以下操作:

callback

与C ++中较早的any_cast相同。