Owe*_*wen 11 c++ temporary move-semantics c++11
这真是一个非常愚蠢的问题,答案可能是一个简单的"不",但我会问,以防万一,因为它会很好.
我可以这样做,行为完全符合要求:
struct A { int x; };
A inc(A a) {
a.x += 1;
return a;
}
inc({ 1 });
Run Code Online (Sandbox Code Playgroud)
事实{ 1 }是一个临时的力量,它不会被重用,因为它已被无效inc()(因为使用移动构造函数 - 请纠正我,如果我错了!).
但是,如果我不记得{ 1 }应该代表的是什么,所以我为它做了一个变量,但是我仍然想强制要求它不能被使用两次(我试图让它就像一个临时的,但命名的):
A a = { 1 };
inc(a);
inc(a);
Run Code Online (Sandbox Code Playgroud)
没有参考类型的变化a将导致编译器抱怨双重使用 - 但移动构造函数已被排除,a因为它不是临时的.
有解决方案吗?
Rei*_*ica 12
我不认为有这样的数据类型,但你可以使用一个最小的嵌套块来限制变量的范围 - 我经常在我的代码中这样做:
{
A a = { 1 };
inc(a);
}
inc(a); //error, `a` is not in scope
Run Code Online (Sandbox Code Playgroud)