C ++中的类a()和类a = class()有啥区别?
Posted
技术标签:
【中文标题】C ++中的类a()和类a = class()有啥区别?【英文标题】:What is the difference between class a() and class a = class() in C++?C ++中的类a()和类a = class()有什么区别? 【发布时间】:2018-01-15 03:46:45 【问题描述】:来自 Java 和 C# 世界,我一直喜欢使用
someclass a = someclass();
而不是
someclass a();
在 C++ 中初始化一个类变量。但是,我的编译器有时会抱怨
Error C2280: Attempting to reference a deleted function
它们之间有什么区别吗?哪个更好?
【问题讨论】:
差别很大。你可以从What does X f(); mean?开始 不是反对者,但我想缺乏minimal reproducible example 并且缺乏研究通常会获得反对票。 【参考方案1】:它们之间有什么区别吗?
一个大的:someclass a();
is declaring a function!
而someclass a = someclass();
,在C++17's copy ellision 之前,要求类是可移动的,这可能不是这里的情况,因为您收到错误Attempting to reference a deleted function
。
哪个更好?
没有。改为使用:
someclass a;
或
someclass a; // C++11
两者都会调用default constructor。
【讨论】:
具有需要参数的构造函数的类怎么样?除了您提到的缺点之外, someclass a(param) 和 someclass a = someclass(param) 是否相同? @AmazingJustussomeclass a()
被视为函数声明的特殊情况主要适用于没有任何参数的情况。但是你可以找到一些带有参数的情况,例如someclass a(someother())
,这也会导致函数声明。
这些将通过使用花括号或添加额外的括号来更正:someclass a( (someother()) )
。
从someclass a(param)
到someclass a = someclass(param)
,首选第一个。【参考方案2】:
Dear Friend in C++ 用户创建对象如下
类名对象名;
#include<iostream>
using namespace std;
class demo
public:
void print()
cout<<"Demo class";
;
int main()
demo d;
d.print();
return 0;
输出 演示类
使用指针对象
#include<iostream>
using namespace std;
class demo
public:
void print()
cout<<"Demo class using pointer object";
;
int main()
demo *d = new demo();
d->print();
return 0;
输出 使用指针对象的演示类
在java中,垃圾收集是自动完成的。我希望你理解概念。
【讨论】:
建议:为了击败您的结束语,您应该将delete d;
添加到最后的main
。更正:void main()
在 C++ 中无效。 C++ 标准要求main
返回int
。一个小问题:你可以在整个编程生涯中看到除了堆栈和堆之外的任何东西,但是 C++ 不需要堆栈和堆。堆栈和堆只是自动和动态存储的最常见(迄今为止)实现。
void main() 将在 turboc 中工作。它不是无效的语句。在 gcc 编译器中,必须指定为 int。在我的第三点中,我指定必须使用删除运算符来释放内存。我在答案中附上了 turbo c 编译器屏幕截图
@K.Vani 说某些编译器编译某些东西并不意味着它是有效的 C++ 代码。编译器有错误,而旧的编译器(如 turboc)往往有很多错误。
@K.Vani TurboC++ 在 1998 年 C++ 标准化之前来来去去。它是一种不同的语言。了解一个,您可以像使用 C 和 C++ 一样混淆另一个,但是有许多差异会让您感到困惑。这是其中之一。以上是关于C ++中的类a()和类a = class()有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
类A继承类B,类C继承类A,那类C是否同时有类A和类B的方法和属性
1.使用哪个修饰符修饰的类不能实例化。 〖 〗 A)final B)abstract C)synchronized D)static 2.下面定义了