是否存在模仿临时的C++变量类型?

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)