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

C++ 临时对象的引用,该怎么处理

2012-09-10 
C++ 临时对象的引用C/C++ codeclass Widget{}int main(){const Widget &cw Widget()Widget &w Widge

C++ 临时对象的引用

C/C++ code
class Widget{};int main(){    const Widget &cw = Widget();    Widget &w = Widget();          //< 通过编译    const int &ci = int();    int &i = int();                //< 编译错误}


以上是 visual studio 2005、visual studio 2010 的编译结果


标准规定,非 const 的(左值)引用应绑定至一个左值,而不是一个临时对象(即一个右值)。而根据测试的结果,似乎只适用于内置类型。大家是什么看法?


[解决办法]
探讨
C/C++ code

class Widget
{
};

int main()
{
const Widget &amp;cw = Widget();
Widget &amp;w = Widget(); //< 通过编译

const int &amp;ci = int();
int &amp;i = int(); ……

[解决办法]
探讨
C/C++ code

class Widget
{
};

int main()
{
const Widget &amp;cw = Widget();
Widget &amp;w = Widget(); //< 通过编译

const int &amp;ci = int();
int &amp;i = int(); ……

[解决办法]
C/C++ code
class Widget{public:    Widget(int i){}};int main(void){    Widget &  w = ( Widget(1) = Widget(2) ); //vs2008 通过    return 0;}
[解决办法]
额vs的编译器对于Widget &w = Widget(); 这样的代码是没有严格执行标准的 正常来说是需要const Widget &w = Widget(); 才符合要求的。这点你可以通过gcc的编译器验证
[解决办法]
探讨

额vs的编译器对于Widget &amp;w = Widget(); 这样的代码是没有严格执行标准的 正常来说是需要const Widget &amp;w = Widget(); 才符合要求的。这点你可以通过gcc的编译器验证

热点排行