Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;生成标准构造函数_C++_Constructor - Fatal编程技术网

C++ C++;生成标准构造函数

C++ C++;生成标准构造函数,c++,constructor,C++,Constructor,我经常发现自己编写的是非常简单的类,而不是C风格的结构。它们通常如下所示: class A { public: type mA; type mB; ... A(type mA,type mB,...) : mA(mA),mB(mB),... {} } 这是一种明智的做法吗?如果是,我想知道是否有任何第三方插件或任何方便的捷径来自动构造构造函数的文本(例如,采用突出显示的或现有的成员定义,用逗号替换分号,将所有内容移动到同一行,…)?感谢 Ed: >前版本是C99,不是C++。

我经常发现自己编写的是非常简单的类,而不是C风格的结构。它们通常如下所示:

class A
{
public:
  type mA;
  type mB;
  ...
  A(type mA,type mB,...) : mA(mA),mB(mB),... {}
}

这是一种明智的做法吗?如果是,我想知道是否有任何第三方插件或任何方便的捷径来自动构造构造函数的文本(例如,采用突出显示的或现有的成员定义,用逗号替换分号,将所有内容移动到同一行,…)?感谢

<强> Ed:<强> >前版本是C99,不是C++。现在是c++

我认为您可以使用{}初始化来代替编写构造函数。还是在c++0x中?c99?我不确定。但它看起来像:

struct A myA = { 3,  5};

是的,只需使用普通骨料:

struct A
{
  type mA;
  type mB;
  ...
};
用法:

A x = { mA, mB, ... };

聚合没有自定义构造函数、析构函数和赋值运算符,它允许进行大量优化。例如,使用大括号语法的聚合初始化通常在没有副本的情况下就地构造成员。此外,您还可以获得编译器为您定义的最佳复制和移动构造函数和赋值运算符。

我认为这是一种明智的方法,尽管OO狂热者可能会评论您缺乏封装。
我知道VisualStudio有内置的代码片段,它们完成了您正在寻找的工作的一半,但这取决于您的IDE。

OP说“非常简单的类”。对析构函数的需求将是一个绝对非简单类的标志!:-)@杰夫:OP确实提到他正在为C型结构做这件事。所以你可以用这个,同意。当我发表评论时,我对这个答案投了赞成票。我只是指出了将此答案用作一般解决方案的一个缺点。@kerrek如果您更改成员变量的位置,它也有可能悄悄地破坏某些东西。这不起作用,句号。如果您正在定义一个变量,它将传递给编译器,但一旦您修改了结构,它就会中断。如果不定义变量,而是将其作为参数传递,或将其作为成员使用,则不允许使用聚合初始化语法。如果我的代码中充满了
struct
,它有一个构造函数,这样我就可以合理地使用它们,而不必不断地声明不必要的变量。@Ali:嗯,你可以删除它吗?或者改进它?不要想;实际测试一下。PS它不作为c++编译,只是作为一个风格注释,我不建议把它全部放在一行。一旦你超过2-3个属性,它就会变得笨拙。相反,将每个初始值设定项和每个参数放在自己的行中。这使得添加新的项目更容易,它们在任何源代码控制差异中都显示得很清楚,并且它可能使代码更容易阅读(记住代码通常是一次写入,读取很多)。StEnoTe:技术上,C++中的<代码>结构> <代码>和<代码>类< /Code >之间的唯一区别是默认访问说明符。如果所有内容都是公共的,只需将其设置为
struct
(即,将上述代码中的
class
替换为
struct
,并删除
public:
访问说明符)