C ++:使用auto将类声明为函数内的变量

卢克·杜品

我正在尝试对函数中的所有局部变量使用auto。

采取以下代码:

class obj 
{
  public:
  obj() {};
  obj( obj&& o ) = delete;
};

int main()
{
  obj test0;
  auto test1 = obj();

  return 0;
}

编译代码:

$ g++ --std=c++1z main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:20: error: use of deleted function ‘obj::obj(obj&&)’
   auto test1 = obj();

注意,定义test0完全可以,但是尝试执行与test1完全相同的声明类型是编译器错误。显然应该是编译器错误,但是在这种情况下,这是否意味着无法使用auto定义obj我遇到了我无法控制的QT对象的问题。

我是否仍在使用C ++ 98格式声明变量,还是有另一种使用auto的方法?

谢谢!!!

TC

这在C ++ 17中是可以的。有保证的复制省略会调整规则,以便在概念上甚至都不会调用move构造函数,因此删除还是无法访问都无关紧要。

在那之前,如果你爱得auto那么多,你可以做

auto&& test1 = obj();

这将创建一个临时obj对象并将其绑定到引用test1,从而将其生存期延长到引用的生存期。除了少数例外,其行为与在C ++ 17中使用plain所获得的行为几乎相同auto

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章