关于C++11下的拷贝构造函数

slwj 2019-01-07 03:42:45
各位好,关于拷贝构造函数,遇到个问题,代码如下:


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

class A{
public:
A(){ cout<<"A Default Constructor"<<"\n"<<endl;}
A( A& ){ cout<<"A Left Refrence Constructor"<<"\n"<<endl;}
A(int n, string str):a(n), desc(str){ cout<<desc<<", "<<"A Constructor"<<"\n"<<endl;}
~A(){ a=0; cout<<"A Destructor"<<"\n"<<endl; }

private:
int a=0;
string desc;
};

typedef class A A;

A FuncA()
{

A FirstA(2, "FuncA()");

return FirstA;

}

int main()
{
A SecondA = FuncA();
}

,如果没有定义这个构造函数

A( A& ){ cout<<"A Left Refrence Constructor"<<"\n"<<endl;}

,运行结果正常:

FuncA(), A Constructor

A Destructor

,如果有这个拷贝构造函数,编译就会报错:

l4.cpp: In function 'int main()':
l4.cpp:33:19: error: invalid initialization of non-const reference of type 'A&' from an rvalue of type 'A'
A SecondA = FuncA();
~~~~~^~
l4.cpp:10:3: note: initializing argument 1 of 'A::A(A&)'
A( A& ar){ a=ar.a; desc=ar.desc; cout<<"A Left Refrence Constructor"<<"\n"<<endl;}

,意思大概是说,将一个右值赋给一个非常量引用是无效的,请问这是为何?

多谢各位!!
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤过 2019-01-07
  • 打赏
  • 举报
回复
引用 4 楼 slwj 的回复:
[quote=引用 3 楼 独孤由过 的回复:] 另外,无需这句话typedef class A A; 这还是C语言风格,C++风格使用结构体和类不需要加上struct和class
没明白你的意思,C++11里面 struct和class关键字仍然保留啊[/quote] 这是以C语言风格定义结构体变量: struct A a; 这是以C++风格定义结构体变量: A a; 在C++中无需这步操作: typedef struct A A; 类也是相同的道理
slwj 2019-01-07
  • 打赏
  • 举报
回复
引用 3 楼 独孤由过 的回复:
另外,无需这句话typedef class A A; 这还是C语言风格,C++风格使用结构体和类不需要加上struct和class
没明白你的意思,C++11里面 struct和class关键字仍然保留啊
独孤过 2019-01-07
  • 打赏
  • 举报
回复
另外,无需这句话typedef class A A; 这还是C语言风格,C++风格使用结构体和类不需要加上struct和class
独孤过 2019-01-07
  • 打赏
  • 举报
回复
拷贝构造函数不要使用左值引用,这种方式不标准,不同编译器对语法的解释有些差异,语法较严格的直接编译不通过
独孤过 2019-01-07
  • 打赏
  • 举报
回复
拷贝构造函数的声明方式: A(const A &); 建议了解左值和右值的区别

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧