草庐IT

move_member

全部标签

c++ - 我应该在移动构造函数中 std::move 一个 shared_ptr 吗?

考虑:#include#include#include#include#include#includeusingnamespacestd;classGizmo{public:Gizmo():foo_(shared_ptr(newstring("bar"))){};Gizmo(Gizmo&&rhs);//ImplementedBelowprivate:shared_ptrfoo_;};/*//doesn'tusestd::moveGizmo::Gizmo(Gizmo&&rhs):foo_(rhs.foo_){}*///Doesusestd::moveGizmo::Gizmo(Gizmo&

c++ - 试图理解 "pointer to member"

我试图了解“指向成员的指针”是如何工作的,但对我来说并非一切都清楚。这是一个示例类:classT{public:inta;intb[10];voidfun(){}};以下代码说明问题并包含问题:voidfun(){};voidmain(){Tobj;intlocal;intarr[10];intarrArr[10][10];int*p=&local;//"standard"pointerintT::*p=&T::a;//"pointertomember"+"T::",thatisclearvoid(*pF)()=fun;//herealsoeverythingisclearvoid(T

c++ - 试图理解 "pointer to member"

我试图了解“指向成员的指针”是如何工作的,但对我来说并非一切都清楚。这是一个示例类:classT{public:inta;intb[10];voidfun(){}};以下代码说明问题并包含问题:voidfun(){};voidmain(){Tobj;intlocal;intarr[10];intarrArr[10][10];int*p=&local;//"standard"pointerintT::*p=&T::a;//"pointertomember"+"T::",thatisclearvoid(*pF)()=fun;//herealsoeverythingisclearvoid(T

c++ - Visual Studio 2015 “non-standard syntax; use ' &' to create a pointer to member”

我正在学习C++并尝试制作一个小游戏井字游戏。但我不断得到C3867,非标准语法;使用'&'创建一个要记住的指针。这是我的井字游戏.h:#pragmaonce#includeusingnamespacestd;classTicTacToe{public:TicTacToe();stringgetName1();stringgetName2();voidprintBoard();voidclearBoard();voidsetName1(stringplayer1Name);voidsetName2(stringplayer2Name);voidsetSign1(stringplayer

c++ - Visual Studio 2015 “non-standard syntax; use ' &' to create a pointer to member”

我正在学习C++并尝试制作一个小游戏井字游戏。但我不断得到C3867,非标准语法;使用'&'创建一个要记住的指针。这是我的井字游戏.h:#pragmaonce#includeusingnamespacestd;classTicTacToe{public:TicTacToe();stringgetName1();stringgetName2();voidprintBoard();voidclearBoard();voidsetName1(stringplayer1Name);voidsetName2(stringplayer2Name);voidsetSign1(stringplayer

c++ - "Move or throw"使用三元运算符

自C++11以来,我一直在使用三元运算符根据某些条件移动或抛出,但最新的GCC(9.1和树干)不再工作。我已将问题简化为这个例子(Wandboxpermalink):#include#includeintmain(){autop=std::make_unique();std::cout它适用于GCC8.3及更早版本,以及每个Clang版本;并且p被移动:p.get():0xde5c20Movepintoqq.get():0xde5c20p.get():0但现在使用GCC9.1及更高版本它不起作用:p.get():0x1d89150Movepintoqq.get():0x1d89150p

c++ - "Move or throw"使用三元运算符

自C++11以来,我一直在使用三元运算符根据某些条件移动或抛出,但最新的GCC(9.1和树干)不再工作。我已将问题简化为这个例子(Wandboxpermalink):#include#includeintmain(){autop=std::make_unique();std::cout它适用于GCC8.3及更早版本,以及每个Clang版本;并且p被移动:p.get():0xde5c20Movepintoqq.get():0xde5c20p.get():0但现在使用GCC9.1及更高版本它不起作用:p.get():0x1d89150Movepintoqq.get():0x1d89150p

c++ - 默认定义的 move 构造函数上的 noexcept 规则是什么?

尤其是与std::vector相关的重要的是类型是noexcept尽可能move。所以在声明move构造函数时=default就像在structObject1{Object1(Object1&&other)=default;};std::is_nothrow_move_constructible::value将是true作为Object1的每个成员(此处为0)是不可move可构造的,答案是here.如果只声明move复制构造函数然后再声明会发生什么=default定义如下代码?structObject2{Object2(Object2&&other);};Object2::Object

c++ - 默认定义的 move 构造函数上的 noexcept 规则是什么?

尤其是与std::vector相关的重要的是类型是noexcept尽可能move。所以在声明move构造函数时=default就像在structObject1{Object1(Object1&&other)=default;};std::is_nothrow_move_constructible::value将是true作为Object1的每个成员(此处为0)是不可move可构造的,答案是here.如果只声明move复制构造函数然后再声明会发生什么=default定义如下代码?structObject2{Object2(Object2&&other);};Object2::Object

c++ - 在 C++11 中访问 move 对象时发出警告

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhatcanIdowithamoved-fromobject?在您调用std::move并将结果传递给函数后,您通常必须假设稍后访问move的对象将导致未定义的行为。是否有工具可以检测这些访问并警告您。例如:{Widgetw;foo(std::move(w));//wmaybeundefinedatthispointw.doSomething();//WARN}至少,gcc4.7.2和clang3.2和-Wall不会提示。更新:回顾这个问题,关键是编译器无法判断一个对象在被移出后是否仍然有效。如果建议N403