无论如何,在C ++ 11中,在函数返回后将函数的输入参数声明为无效?
对于一个简单的示例,请考虑我有一个矩形对象,其坐标为左下角,坐标为右上角。如果我通过非常量引用将该函数传递给该矩形对象,则该函数可以随意在合适的地方对矩形内存进行副作用。如果该函数需要缩放它而不是复制到新的内存只是想在原地工作,该怎么办,我们如何在C ++ 11中声明该函数返回后,传入的矩形的内容不再有效,因为它们可能已通过调用的函数进行了修改?
我不想修改矩形类,但是在函数调用的声明中有一些方法来指示从函数返回时,应将按引用传递的内存视为无效,并且如果调用者让编译器给出错误信息尝试在函数调用返回之后使用它。在C ++ 11中有什么方法可以做到这一点吗?
最佳答案
您可以中途到达:
void function(rectangle&& x) // r-value reference
{
// ...
}
rectangle r;
function(r); // error
function(std::move(r)); // okay, explicitly made into an rvalue
// now (by convention) r shouldn't be used, because it's been moved
就是说,类型系统C ++不够强大,如果再次使用它会给您一个错误。
不过,我质疑您的设计。复印有什么问题?还是为什么不在函数名称中明确说明要修改参数? (如
std::swap
。)关于c++ - 如何在C++ 11中的函数调用后将对象声明为无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8504575/