函数取地址与复制构造函数的使用
来源:互联网 发布:section软件使用方法 编辑:程序博客网 时间:2024/05/17 21:39
今天在CSDN的论坛上逛一了圈发现有如下两段代码:我在两个提问的地方都已经给予了作答,同时发布到blog上希望能有更多的人受益。
第一段是对复制构造函数的使用
class c{string name;public:c(const string& s):name(s){}};void fn(c& s){cout<<"ok!"<<endl;}int main(){fn(string("Jenny"));}//这段代码在VS2005下是肯定不能编译的,因为vs只能从string推导出c,没有办法自动从string推导出c&。将函数fn()的引用去掉就可以得。------解答:首先在主函数里的string会生成一个无名的对象,然后调用c的复制构造函数生成一个无名的c对象这就可以,第二层原因是引用必须是有名的对象且必须初始化才能在C++中做引用操作。
第二段是对函数取地地址操作
# include <iostream>using namespace std;int func(){int a = 2;return a;}int main(void){cout << &func() << endl; //提示这句错误,需要左值,如果返回一个对象却可以return 0;}
# include <iostream>using namespace std;class human{public:void set(int i){x = i;}int get(){return x;}private:int x;};human func(){human a;a.set(123);cout << a.get()<<endl;return a;}int main(void){cout << &func() << endl; //可以取地址return 0;}
<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245); ">//解答:一般的,如果返回值是内建类型的话,例如int,short,char之类的,通常将返回值保存在eax,ax,al寄存器里面,自然就无法取得地址了。</span>
0 0
- 函数取地址与复制构造函数的使用
- 复制构造函数的使用
- C++中类的构造函数与复制构造函数
- 构造函数和复制构造函数的理解与应用
- 复制构造函数与普通构造函数的区别
- 复制构造函数与赋值构造函数
- 复制构造函数与赋值构造函数
- 复制构造函数与拷贝构造函数
- 构造函数与复制构造函数
- 关于构造函数与复制构造函数
- C++使用复制构造函数的情况
- 复制构造函数与赋值函数的区别
- 复制构造函数 与 赋值函数 的区别
- 复制构造函数 与 赋值函数 的区别
- 复制构造函数 与 赋值函数 的区别
- 复制构造函数 与 赋值函数 的区别
- 复制构造函数 与 赋值操作函数
- 拷贝构造函数 与拷贝复制函数
- xcode cocos2dx 2.2 使用c++11
- SQL Server 2008中SQL Merge命令详解
- char str[]与char *str的区别
- 命令行的方式创建avd
- linux系统上svn权限控制
- 函数取地址与复制构造函数的使用
- 公众宝-免费智能多功能服务,欢迎交流
- mprotect() failed: Cannot allocate memory
- PHP中的按位与和按位或操作示例
- C++实现输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
- 例题(8.9) 打印水仙花数 (1041)
- hive --auxpath路径问题
- 关于android查看电池历史记录中的电池已使用时间解释
- PHP位操作符