64,654
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
class A
{
public:
//A():a(0){}
int a;
int f()
{return a;}
};
A fun()
{
return A();
}
int _tmain(int argc, _TCHAR* argv[])
{
fun().a = 5 ;
return 0;
}
//不注释掉构造函数,编译不过
#include "stdafx.h"
class A
{
public:
//A():a(0){}
int b;
int *a;
int& f()
{return *a;}
int ff()
{return b;}
int& operator[](int index)
{return arr[index];}
private:
int arr[100];
};
class B
{
public:
//B():b(0){}
int b;
};
B fff()
{return B();}
A fun()
{
return A();
}
A* fun1()
{
return new A;
}
A fun2()
{
return A();
}
// .操作表达式的结果是由左操作数和右操作数共同决定,先计算左操作数,然后共同决定整个表达式的结果
// 那是不是可以这么理解:
// 左操作数为左值,那么整个表达式的结果可能为左值也可能为右值,这个时候 看.操作右表达式的结果是左值还是右值来定。
// 如果 . 操作的左操作数为右值,那整个表达式一定为右值。
int _tmain(int argc, _TCHAR* argv[])
{
int m = 5; //
*(fun().a) = m; //右值.左值 结果为左值 如果按上述解释,这句代码是不符合标准的
//fun().b = m; //右值.左值 结果为右值 符合解释
fun1()->b = m; //左值.左值 结果为左值 符合解释
//fun2().ff() = 5; //右值.右值 不能编译 符合解释
(*fun1())[12] = 3; //左值[常量表达式] 符合解释
(new A)->b = m; //左值->左值 结果为左值 符合解释
//(new A)->ff() = m; //左值->右值 不能编译 符合解释
fff().b = 5; //右值.左值 结果为左值 如果按上述解释,这句代码是不符合标准的
return 0;
}
//如果上述解释不正确,请问,该如何解释
//*(fun().a) = m;
//fff().b = 5;
C:\Documents and Settings\Rabbits' World\Desktop\test.cpp:16:8: error: using tem
porary as lvalue [-fpermissive]
A().a = 0;
^