C++拷贝构造函数与函数声明的区分
来源:互联网 发布:51单片机蓝牙模块 编辑:程序博客网 时间:2024/06/05 20:01
C++拷贝构造函数与匿名对象的存在使函数调用过程中很容易出现因为匿名对象做拷贝构造函数参数搅成一坨构成函数声明的结构,导致定义了一条没有作用的函数声明语句;
以下代码可以用于验证区分函数声明与给匿名对象起别名的情况。
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "无参构造函数" << endl;;
}
A(int a)
{
cout << "int参数构造函数" << endl;;
}
A(A& obj)
{
cout << "拷贝构造函数" << endl;;
}
protected:
int x;
};
int main()
{
A obj(A(10));//先执行A(10)构造函数,返回匿名对象;再给匿名对象起别名obj (编译器优化不会调用拷贝构造函数)
A obj5();//函数声明
A obj0;//对象定义
A obj1(A(obj2)); //函数声明语句
A obj3(A obj4());//函数声明内部嵌套一个函数声明——回调函数
/* void PrintList(void * list, void print(void *data));
//常见的回调函数
typedef void(*PrintData)(void *data);
void PrintList(void * list, PrintData print); */
A obj6(A obj7);//函数声明与A obj1(A(obj2));等价
return 0;
}
总结:函数声明常见结构 int fun(int a); //声明大括号内部有参数类型int
回调函数常见结构 int fun1( int fun2( ) )
建立匿名对象再起别名结构 classA obj1( classA ( 10) ) ;
//classA (10)没有歧义会直接调用构造函数,调完构造函数后 得到一个匿名对象,匿名对象起别名结构:classA obj1( obj2);
拷贝构造函数结构A tmp2 = A(obj2); 或A tmp( obj );
A tmp2( A(obj2) ); //大括号内部obj2还没有实例化,没有构造函数实例化它,因而括号可以看作结合律限定符,整条语句等价于A tmp2 (A obj2)//很明显的函数声明格式
- C++拷贝构造函数与函数声明的区分
- <C++>14.构造函数的重载与拷贝构造函数
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- 【C++】拷贝构造函数
- c++::拷贝构造函数
- 【C++】:拷贝构造函数
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- 【C++】基础知识—构造函数与拷贝构造函数
- C 类对象的拷贝构造函数
- [C++] 拷贝构造函数的调用
- (C++)定义类的拷贝构造函数
- [C++] C++的拷贝构造函数浅析
- 【C++】拷贝构造函数的剖析
- 拷贝构造函数与赋值构造函数的区别
- 开源一个C++自动垃圾回收器
- MyBatis返回值问题
- Java编程之阶乘
- POJ_Hangover
- Invariant Violation:Application 项目名 has not been registered.
- C++拷贝构造函数与函数声明的区分
- flex布局介绍
- git clone 分支
- studio 翻译插件ECTranslation
- 抽象类、接口
- LeetCode 64. Minimum Path Sum
- mysql DATE_FORMAT的用法API
- Java设计模式--中介者模式
- maven下配置ssm框架