TECHTOGOU

c++ - 理解左值到右值转换的例子

我很难理解这段代码(来自C++14标准草案[conv.lval]的示例)如何调用g(false)的未定义行为>。为什么constexpr使程序有效?此外,“不访问y.n”是什么意思?在对g()的两次调用中,我们都返回了n数据成员,那么为什么最后一行说它不访问它呢?structS{intn;};autof(){Sx{1};constexprSy{2};return[&](boolb){return(b?y:x).n;};}autog=f();intm=g(false);//undefinedbehaviorduetoaccessofx.noutsideits//lifetimei

c++ - "non-const lvalue reference to type cannot bind"引用错误(类型&)但指针错误(类型*)

我收到此错误“输入‘Cell’的非常量左值无法使用此代码绑定(bind)到‘Cell*’类型的临时对象:classRegionHolder{public:RegionHolder(Region&Region1):m_RegionCellNOO(&(Region1.m_NOO))~RegionHolder();protected:Cell&m_RegionCellNOO;//differenceishere};但不是这个:classRegionHolder{public:RegionHolder(Region&Region1):m_RegionCellNO

c++ - 地址不能取什么样的左值?

在thisconference,ScottMeyers首先说“左值通常是你可以取地址的表达式”。我一般强调这个词:什么是你不能获取地址的左值?(如果存在的话)。编辑:请提供包含您的答案的代码片段,这会让事情更清楚。 最佳答案 我认为位域满足你的条件...我相信f.x是一个左值,但你不能获取它的地址。有趣的是,您也不能执行auto&x=f.x。C++11Section8.3.1PartofParagraph4:Sincetheaddressofabit-field(9.6)cannotbetaken,apointercanneverp

c++ - 获取 const 左值引用的地址是否合法?

#include<iostream>intfoo(){return0;}intmain(){constint&a=foo();std::cout<<&a<<std::endl;}在这段代码中,a绑定(bind)到一个右值。取它的地址合法吗?(我的法律意思是:在代码中格式不正确?我是否导致了未定义的行为?) 最佳答案 这很好。在C++11中,您甚至可以这样做:int&&a=foo();a=123;您可以这样考虑临时对象(概念上和一般情况下):x=func();//tr

c++ - 为什么作为返回类型的右值引用不能初始化非常量引用?

我读了this问题,我知道右值引用是左值。然而,对于这段代码,例子1,int&&fun(){return1;}intmain(){int&a=fun();}当我编译它时:error:invalidinitializationofnon-constreferenceoftype'int&'fromanrvalueoftype'int'所以C++编译器告诉我fun的返回类型是右值。右值引用如何变成右值?我认为编译器应该以相同的方式对待左值引用和右值引用,但是这段代码,示例2,int&fun(){intb;returnb

C++ - 需要左值作为赋值的左操作数

这个问题在这里已经有了答案:FunctionreturningstructasLValue(4个答案)关闭5年前。考虑以下代码:#include<iostream>usingnamespacestd;classX{inti;public:X(intii=0);};X::X(intii){i=ii;}inta;Xf1(){returnX();}intf2(){returna;}intmain(){f1()=X(1);f2()=3;}如果你尝试运行它,你会得到error:lvaluerequiredasleftoperandofassignment因此在第17行f1()被认为是

c++ - 是 int & foo();一个左值?

我知道可能还有其他类似的问题,但他们没有完全回答我的问题。我一直在浏览有关C++类型推导的讲座中的一些幻灯片,在其中一张中我发现了以下语句:int&foo();//foo()islvalue;起初,我以为这是错误的——foo是一个函数,它不能被赋值,它不是一个左值。但现在我想作者可能有不同的想法。也就是说,函数调用可能是左值,而不是函数本身。换句话说:foo是左值吗?foo()是左值吗?是否可以将函数(不是函数调用)分配给(即foo=something;)?“左值是可以分配给的每个对象/事物”-这个陈述总是正确和准确的吗?问题4需要更多解释。有了它,我试图理解什么是左值。我看到

c++ - 为什么 int 不能用作返回类型的左值,而用户定义的类可以?

structA{};Af1(){returnA();}intf2(){returnint();}intmain(){f1()=A();//OKf2()=int();//errorC2106:'=':leftoperandmustbel-value}为什么f1()=A();正常而f2()=int();失败? 最佳答案 f1()返回A的实例。由于您没有覆盖复制/移动赋值运算符,因此编译器会为您生成一个。您实际上是在调用成员函数:f1()=A();//callsA&operator=(A&&)第二个

c++ - 为什么 std::forward 将左值和右值转换为右值引用?

我想我对std::forward感到困惑.我的函数使用std::forward如下,但为了便于解释,它进行了很多简化和修改。//Thisisanexamplecodetoexplainmyquestionsimply.template<typenameElement>voidadd(Element&&element){staticstd::vectorvec;vec.push_back(std::forward<Element>(element));}我用上面的函数尝试了两种情况;Case1左值参数和Case2右值参数。案例1:左值参数autos

Javascript 三元运算符左值

我正在阅读不同语言的三元运算符,并注意到Javascript部分中的一些有趣内容。http://en.wikipedia.org/wiki/%3F:#JavaScriptTheconditionaloperatorinJavaScripthasthesamesyntaxandprecedencestructureasintheotherBCPL-derivedvariants,butasignificantdifferenceexistsinthesemantics:itreturnsanl-value.第一句话指出javascript中三元组的返回是一个左值,所以我尝试了一些示例,结