首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

临时对象, vector<int>(c).swap(c)解决办法

2012-03-14 
临时对象, vectorint(c).swap(c)vector的这种swapshrink调用到了临时对象的非const方法,感觉比较诡异简

临时对象, vector<int>(c).swap(c)
vector的这种swap   shrink调用到了临时对象的非const方法,   感觉比较诡异;

简化一下:

struct   Foo{
  int   a;
  void   change(){a=42;}
};

我用vc7.1试了下:
Foo().change();是允许的;
而:
Foo().a   =   42;
却要求     error   C2106:   '= '   :   left   operand   must   be   l-value

哪位解释下,   或者哪本书里讨论了这个冬冬?
thanks,

[解决办法]

普通类型临时变量是不能更改的.
但是复杂类型可以.

[解决办法]
右值对象(r-value object)并不等价于常量对象(const object)。
右值对象(或右值表达式)不可以放在等号左边,而常量对象(或常量表达式)既不可以被放在等号左边,也不可以经由它调用非const成员函数。
——差不多所有的就只有这些了。

C++语言并没说右值对象上不能调用任何非const成员函数。
除非那个右值对象同时也是const对象,比如对于函数:
const string get_string();
而言,下面的
get_string().clear();
是错误的。
而如果是:
string get_string();
则没有问题。

热点排行