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) 是否相同? @AmazingJustus someclass 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的方法和属性

Python中的类(classes)

1.使用哪个修饰符修饰的类不能实例化。 〖 〗 A)final B)abstract C)synchronized D)static 2.下面定义了

C语言中都有啥类型数组?

c ++指针转换过载

使用C语言为python编写动态模块--在C中实现python中的类