高质量程序设计指南c++/c语言(19)--赋值操作符“=”

    赋值操作符的左边的操作数要求是可寻址的。

 1、

#include<iostream>
#include<string>
using namespace std;

char get_val(string &str,string::size_type ix)
{
     return str[ix];
}

int main(void)
{
    string s("123456");
    cout<<s<<endl;
    get_val(s,0)='a';   
    cout<<s<<endl;
    return 0;
}

编译错误:get_val(s,0)='a';  赋值运算符左边的操作数不可寻址

2、

#include<iostream>
#include<string>
using namespace std;

char * get_val(string &str,string::size_type ix)
{
     return &str[ix];
}

int main(void)
{
    string s("123456");
    cout<<s<<endl;
    *(get_val(s,0))='a';
    cout<<s<<endl;
    return 0;
}

语法完全正确:输出123456 、a3456,但是绝不要这样写程序。

3、

#include<iostream>
using namespace std;

class A
{};

A getA()
{
    A a;
    return a;
}

int getInt()
{
    return 6;
}

int main(void)
{
    A x;
    getA() = x;    //ok,临时的对象可寻址
    getInt() = 6;  //error,临时的基本数据类型不可寻址

    return 0;
}

 

 

posted on 2013-04-28 16:25  江在路上2  阅读(197)  评论(0编辑  收藏  举报