8

我正在阅读文档std::any_cast,我发现 API 的强制转换要么返回一个值到所持有的对象,要么返回一个指向它的指针,这很奇怪。为什么不返回参考?每次使用非指针类型参数调用函数时都需要进行复制。

我可以看到强制转换的指针版本可能会更多地表明意图并且可能更清楚一些,但是为什么不将返回的值作为这样的引用呢?

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

代替

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

此外,即使您要求引用,演员也会删除引用并将副本返回到存储的对象,请参阅此处http://en.cppreference.com/w/函数重载 1-3 的返回值的解释cpp/实用程序/任何/any_cast

4

1 回答 1

11

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

请注意,Boost 已经定义any_cast了这种方式十多年了,加上它的匹配static_cast和朋友。因此,如果您需要参考,请执行以下操作:

any_cast<Foo&>(x)

与您对_castC++ 中较旧的 s 所做的相同。

于 2017-01-28T03:04:46.160 回答