草庐IT

c++ - 为什么右值引用绑定(bind)到 xvalue 在我的代码中不起作用?

我试图理解C++11中的左值和右值。于是我写了一段测试代码:intx=10;intfoo(){returnx;}int&bar(){returnx;}int&&baz(){return10;}intmain(){int&lr1=10;//error:lvaluereferencesrvalueint&lr2=x;//okint&lr3=foo();//error:lvaluereferencesrvalueint&lr4=bar();//okint&lr5=baz();//error:lvaluereferencesrvalueint&&rr1=10;//okint&&rr2=x;//

c++ - 为什么右值引用绑定(bind)到 xvalue 在我的代码中不起作用?

我试图理解C++11中的左值和右值。于是我写了一段测试代码:intx=10;intfoo(){returnx;}int&bar(){returnx;}int&&baz(){return10;}intmain(){int&lr1=10;//error:lvaluereferencesrvalueint&lr2=x;//okint&lr3=foo();//error:lvaluereferencesrvalueint&lr4=bar();//okint&lr5=baz();//error:lvaluereferencesrvalueint&&rr1=10;//okint&&rr2=x;//

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++0x 右值引用 - 左值-右值绑定(bind)

这是一个后续问题C++0xrvaluereferencesandtemporaries在上一个问题中,我问过这段代码应该如何工作:voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}由于隐式临时性,似乎应该调用移动重载,这发生在GCC而不是MSVC(或MSVC的智能感知中使用的EDG前端)。这段代码怎么样?voidf(std::string&&);//NB:Noconststring&overloadsuppliedvoidg1(

C++0x 右值引用 - 左值-右值绑定(bind)

这是一个后续问题C++0xrvaluereferencesandtemporaries在上一个问题中,我问过这段代码应该如何工作:voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}由于隐式临时性,似乎应该调用移动重载,这发生在GCC而不是MSVC(或MSVC的智能感知中使用的EDG前端)。这段代码怎么样?voidf(std::string&&);//NB:Noconststring&overloadsuppliedvoidg1(

c++ - std::common_type 应该使用 std::decay 吗?

给定类型A,B,我关心std::common_type的确切定义,不考虑可变参数std::common_type对于任意类型A....所以让usingT=decltype(true?std::declval():std::declval());usingC=std::common_type;现在,根据一些消息来源,我发现了以下关系(为简洁起见,跳过typename):cppreference.com:C::type=std::decay::typecplusplus.com:C::type=TGCC4.8.1实现:C::type=std::decay::type如果T有效,否则C不包含

c++ - std::common_type 应该使用 std::decay 吗?

给定类型A,B,我关心std::common_type的确切定义,不考虑可变参数std::common_type对于任意类型A....所以让usingT=decltype(true?std::declval():std::declval());usingC=std::common_type;现在,根据一些消息来源,我发现了以下关系(为简洁起见,跳过typename):cppreference.com:C::type=std::decay::typecplusplus.com:C::type=TGCC4.8.1实现:C::type=std::decay::type如果T有效,否则C不包含

c++ - 重载运算符 [] 并没有得到 "lvalue required as left operand of assignment"错误

这与所有“需要左值作为赋值的左操作数”错误问题有点相反。我有一个重载运算符[]的类,但只有返回临时的版本。如果要返回一个int:structFoo{intoperator[](intidx)const{returnint(0);}};Foof;f[1]=5;我会理所当然地得到左值编译器错误。但是,如果它返回一个结构类型,编译器(在这种情况下是GCC7.2)根本不会提示:structBar{};structFoo{Baroperator[](intidx)const{returnBar();}};Foof;f[1]=Bar();如果Bar是临时的并且没有专门的运算符=,为什么不会以同样的

c++ - 重载运算符 [] 并没有得到 "lvalue required as left operand of assignment"错误

这与所有“需要左值作为赋值的左操作数”错误问题有点相反。我有一个重载运算符[]的类,但只有返回临时的版本。如果要返回一个int:structFoo{intoperator[](intidx)const{returnint(0);}};Foof;f[1]=5;我会理所当然地得到左值编译器错误。但是,如果它返回一个结构类型,编译器(在这种情况下是GCC7.2)根本不会提示:structBar{};structFoo{Baroperator[](intidx)const{returnBar();}};Foof;f[1]=Bar();如果Bar是临时的并且没有专门的运算符=,为什么不会以同样的