草庐IT

non-assignable

全部标签

C++0x : rvalue reference versus non-const lvalue

在C++03中编程时,我们不能将未命名的临时T()传递给函数voidfoo(T&);。通常的解决方案是给临时命名,然后像这样传递它:Tv;foo(v);现在,C++0x出现了——现在有了右值引用,定义为voidfoo(T&&)的函数将允许我传递一个临时值。这让我想到了我的问题:既然一个接受右值引用的函数既可以接受右值引用(未命名的临时对象)也可以接受左值引用(命名的非常量引用),是否有任何理由在函数参数中再使用左值引用?我们不应该总是使用右值作为函数参数吗?当然,一个接受左值引用的函数会阻止调用者传递一个临时值,但我不确定这是否是一个有用的限制。 最佳答案

C++0x : rvalue reference versus non-const lvalue

在C++03中编程时,我们不能将未命名的临时T()传递给函数voidfoo(T&);。通常的解决方案是给临时命名,然后像这样传递它:Tv;foo(v);现在,C++0x出现了——现在有了右值引用,定义为voidfoo(T&&)的函数将允许我传递一个临时值。这让我想到了我的问题:既然一个接受右值引用的函数既可以接受右值引用(未命名的临时对象)也可以接受左值引用(命名的非常量引用),是否有任何理由在函数参数中再使用左值引用?我们不应该总是使用右值作为函数参数吗?当然,一个接受左值引用的函数会阻止调用者传递一个临时值,但我不确定这是否是一个有用的限制。 最佳答案

c++ - 使用 boost::assign::list_of

这样编译:std::vectorvalue=boost::assign::list_of(1)(2);但不是这个:Constructor(std::vectorvalue){}Constructor(boost::assign::list_of(1)(2));是否有一种用于初始化传递给构造函数的vector的单线解决方案?更好的是,如果构造函数通过引用来复制到类变量:Constructor(std::vector&value){_value=value;}更新如果我尝试以下操作:enumFoo{FOO_ONE,FOO_TWO};classConstructor{public:Const

c++ - 使用 boost::assign::list_of

这样编译:std::vectorvalue=boost::assign::list_of(1)(2);但不是这个:Constructor(std::vectorvalue){}Constructor(boost::assign::list_of(1)(2));是否有一种用于初始化传递给构造函数的vector的单线解决方案?更好的是,如果构造函数通过引用来复制到类变量:Constructor(std::vector&value){_value=value;}更新如果我尝试以下操作:enumFoo{FOO_ONE,FOO_TWO};classConstructor{public:Const

c++ - STL vector : resize() and assign()

有一个类(class)成员std::vectorv和intn,在此vector上使用以下内容有什么区别?,未初始化:v.assign(n,0.0);或v.resize(n,0.0); 最佳答案 assign将大小设置为n并将所有元素值设置为0.0,而resize将大小设置为n并且只有new元素值为0.0。如果v事先为空,它们是相同的,但assign可能更清楚。 关于c++-STLvector:resize()andassign(),我们在StackOverflow上找到一个类似的问题:

c++ - STL vector : resize() and assign()

有一个类(class)成员std::vectorv和intn,在此vector上使用以下内容有什么区别?,未初始化:v.assign(n,0.0);或v.resize(n,0.0); 最佳答案 assign将大小设置为n并将所有元素值设置为0.0,而resize将大小设置为n并且只有new元素值为0.0。如果v事先为空,它们是相同的,但assign可能更清楚。 关于c++-STLvector:resize()andassign(),我们在StackOverflow上找到一个类似的问题:

c++ - 位域 "In-class initialization"结果为 "error: lvalue required as left operand of assignment"

structbitfield{inti=0;//okintj:8=0;//error:lvaluerequiredasleftoperandofassignment};使用C++11“类内初始化”功能初始化位域的正确语法是什么? 最佳答案 这是作为C++标准的核心问题1341提出的,但在2015年10月被C++核心工作组拒绝为NAD(“不是缺陷”)-参见http://open-std.org/JTC1/SC22/WG21/docs/cwg_closed.html#1341 关于c++-位

c++ - 位域 "In-class initialization"结果为 "error: lvalue required as left operand of assignment"

structbitfield{inti=0;//okintj:8=0;//error:lvaluerequiredasleftoperandofassignment};使用C++11“类内初始化”功能初始化位域的正确语法是什么? 最佳答案 这是作为C++标准的核心问题1341提出的,但在2015年10月被C++核心工作组拒绝为NAD(“不是缺陷”)-参见http://open-std.org/JTC1/SC22/WG21/docs/cwg_closed.html#1341 关于c++-位

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