c++ - 是否有模仿临时变量的 C++ 变量类型?

标签 c++ c++11 move-semantics temporary

这确实是一个非常愚蠢的问题,答案可能是简单的“否”,但我会问以防万一,因为这样会很好。

我可以做到这一点,行为完全符合要求:

struct A { int x; };

A inc(A a) {
    a.x += 1;
    return a;
}

inc({ 1 });

{ 1 } 是临时的,它不会被重用,因为它已被 inc() 设置为无效(因为 move 构造函数的使用——如果我对此有误,请纠正我!)。

但是如果我不记得{ 1 } 应该代表什么怎么办,所以我为它做了一个变量,但我仍然想强制要求它不能使用了两次(我试图让它就像一个临时的,但命名):

A a = { 1 };
inc(a);
inc(a);

a 的引用类型没有变化会导致编译器提示双重使用——但是 move 构造函数已被 a 排除,因为它不是临时的。

有解决办法吗?

最佳答案

我认为没有相应的数据类型,但您可以使用最小嵌套 block 来限制变量的范围——我在我的代码中经常这样做:

{
  A a = { 1 };
  inc(a);
}
inc(a);  //error, `a` is not in scope

关于c++ - 是否有模仿临时变量的 C++ 变量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835800/

相关文章:

c++ - 临时左值是 std::move 的用例吗

c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样

c++ - 使用 Windows 套接字进行蓝牙编程 - 范围内的设备

c++ 如何正确预定义 char* 数组?

c++ - 了解 C++ 0x 特性

c++11 - 如何将 std::chrono::time_point 转换为字符串

c++ - 如何解决 g++ 问题 "internal compiler error: Illegal instruction min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }"?

c++ - 使用指向内部缓冲区的指针 move 语义

c++ - 在 hackerrank 生日蛋糕蜡烛问题中使用 std::vector

c++ - 如何在 Windows 上使用 MinGW 安装/启用 OpenMP for Eclipse?