Luk*_*pin 0 c++ move-semantics c++11 c++17
我正在尝试对我的函数中的所有局部变量使用auto.
请使用以下代码:
class obj
{
public:
obj() {};
obj( obj&& o ) = delete;
};
int main()
{
obj test0;
auto test1 = obj();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译代码:
$ 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();
Run Code Online (Sandbox Code Playgroud)
请注意,定义test0完全没问题,但尝试执行完全相同类型的test1声明是编译器错误.显然应该是编译器错误,但在这种情况下,是否意味着obj无法用auto定义?我正在使用我无法控制的QT对象来解决这个问题.
我还在使用C++ 98格式来声明变量,还是有其他方法可以使用auto?
谢谢!!!
这在C++ 17中是可以的; 保证复制省略调整规则,以便移动构造函数甚至不在概念上调用,因此删除或无法访问它并不重要.
在此之前,如果你auto非常喜欢,你可以做到
auto&& test1 = obj();
Run Code Online (Sandbox Code Playgroud)
这将创建一个临时obj对象并将其绑定到引用test1,从而将其生命周期延长到引用的生命周期.除了少数例外,这种行为与使用plain的C++ 17中的行为非常相似auto.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |