高质量程序设计指南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; }