C++访问静态成员的问题
我是C++的新手,今天在书上看到了这样一段话:
如果使用成员选择运算符“.”和“->”来调用类的静态成员函数和静态数据成员时候,表达式中运算符“.”和“->”前面的表达式不会被求值,如果在这部分进行了函数调用,则这些函数永远也不会真正被调用。
例如:
假设1.变量i是类MyClass的静态成员变量
假设2.GetMyClass()的返回值是一个类型为MyClass的实例对象
则:GetMyClass().i = 1;
上面的表达式中,编译器不对GetMyClass()进行求值,实际上该函数永远不会被调用,函数的代码也不会被执行。
上面是书上说的,但是我实际编码中却发现不是这样的情况,GetMyClass()函数还是会被调用。以下是我的代码:
#include<iostream>
using namespace std;
class MyClass
{
public:
static int i;
static void setI(int v);
static int getI();
};
int MyClass::i;
void MyClass::setI(int v)
{
i = v;
}
int MyClass::getI()
{
return i;
}
MyClass GetMyClass()
{
cout<<"GetMyClass"<<endl;
return MyClass();
}
int main()
{
MyClass myObject;
myObject.i = 321;
GetMyClass().i=111;
GetMyClass().setI(123);
cout<<"myObject.i="<<myObject.i<<endl
<<"GetMyClass().i="<<GetMyClass().getI()<<endl;
return 0;
}
输出结果是:
GetMyClass
GetMyClass
GetMyClass
GetMyClass
myObject.i=123
GetMyClass().i=123
但是有一个警告:
warning C4101: 'myObject' : unreferenced local variable
我的疑问还有:
输出结果说明“.”和“->”前面的会被引用,但是那条警告不是说明myObject对象没被引用吗?这两者互相矛盾,不知是哪里出了问题?
希望哪位大虾指点一二,谢谢!