我想问为什么as_const禁止使用右值参数according to cppreference.com(即为什么标准人员这样做,而不是为什么cppreference.com对此专门引用了它们。而且也不是在规范中将委员会的意图编成法规,只是为了确保:)))。这个(人工的)示例将产生一个错误(用户希望使其保持常量以保持COW安静)

QChar c = as_const(getQString())[0];

Another question's answer指出,如果仅删除右值引用重载的删除,它将默默地将右值转换为左值。是的,但是为什么不优雅地处理右值并为右值输入返回const右值,为左值输入返回const左值?

最佳答案

原因之一可能是由于缺乏所有权转移,对右值 Assets 可能存在危险

for (auto const &&value : as_const(getQString()))  // whoops!
{
}

并且可能没有令人信服的用例来证明无视这种可能性的合理性。

关于c++ - 为什么as_const禁止右值参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39051460/

10-12 16:11