C++;C中的构造函数初始化列表替代方案? 在C++中,类构造函数可以使用初始化列表,我知道这是一个通过避免额外的赋值来改进的性能特征。因此,我想知道,在C中是否有类似的方法可以实现基本相同的功能,将结构初始化为C++类构造函数? 我对C++中的特征如何工作有点不清楚,因此对该主题的任何附加信息也会被理解。C没有任何类似的特性,但是,由于C还没有构造函数,所以不存在不必要的分配危险。
更大的原则是,在语言中引入一个特性通常需要额外的特性来增强原始特性。一个简单的例子是线程。如果线程作为一种功能内置到该语言中,那么直接的问题就是如何同步它们。因此,还需要同步。因此,您可以看到没有内置线程或同步的语言(如C),以及既有线程又有同步的语言,但不是一种没有另一种的语言。在这里,构造函数是线程,就像同步是列出初始值设定项一样。C没有任何类似的功能,但是因为C也没有构造函数,所以没有不必要的赋值的危险C++;C中的构造函数初始化列表替代方案? 在C++中,类构造函数可以使用初始化列表,我知道这是一个通过避免额外的赋值来改进的性能特征。因此,我想知道,在C中是否有类似的方法可以实现基本相同的功能,将结构初始化为C++类构造函数? 我对C++中的特征如何工作有点不清楚,因此对该主题的任何附加信息也会被理解。C没有任何类似的特性,但是,由于C还没有构造函数,所以不存在不必要的分配危险。,c++,c,constructor,initialization,C++,C,Constructor,Initialization,更大的原则是,在语言中引入一个特性通常需要额外的特性来增强原始特性。一个简单的例子是线程。如果线程作为一种功能内置到该语言中,那么直接的问题就是如何同步它们。因此,还需要同步。因此,您可以看到没有内置线程或同步的语言(如C),以及既有线程又有同步的语言,但不是一种没有另一种的语言。在这里,构造函数是线程,就像同步是列出初始值设定项一样。C没有任何类似的功能,但是因为C也没有构造函数,所以没有不必要的赋值的危险 更大的原则是,在语言中引入一个特性通常需要额外的特性来增强原始特性。一个简单的例子是线
更大的原则是,在语言中引入一个特性通常需要额外的特性来增强原始特性。一个简单的例子是线程。如果线程作为一种功能内置到该语言中,那么直接的问题就是如何同步它们。因此,还需要同步。因此,您可以看到没有内置线程或同步的语言(如C),以及既有线程又有同步的语言,但不是一种没有另一种的语言。这里,构造函数是线程,就像同步是列出初始值设定项一样。在C中没有这样的功能。最接近的是。在C中没有这样的功能。最接近的是。您可以编写一个单独的函数,在从类创建对象时调用它,然后将它传递给它: C: 也可以在C++中执行此操作:
struct mine{
int x;
void initialize()
{
x = 4; //initialization
}
};
void main(void)
{
mine me;
me.initialize();
printf("%d",me.x);
}
这将输出
4
作为结果。您可以编写一个单独的函数,在从类创建对象时调用它,然后将其传递给它:
C:
也可以在C++中执行此操作:
struct mine{
int x;
void initialize()
{
x = 4; //initialization
}
};
void main(void)
{
mine me;
me.initialize();
printf("%d",me.x);
}
<>这将输出<代码> 4代码>代码> C++中的构造函数,初始化列表允许C++编译器在成员变量的位置上适当地构造成员,而不是使用赋值操作符、复制构造函数或移动构造函数初始化成员变量。有关更多详细信息,请参阅 在C中,C编译器不提供此类自动操作。这意味着程序员直接控制所有初始化,不需要特殊的语言特性来避免这些额外的操作
更清楚一些,考虑在C++构造函数中使用赋值初始化时发生的事情:
void my_struct_init(struct my_struct* sp)
{
member_init_default(&sp->the_member); /* default constructor for member */
struct member memb; /* temporary on stack */
member_init_other(&memb, ...params...); /* initialize memb */
member_assign(&sp->the_member,&memb); /* assign member */
member_finalize(&memb); /* finalize the temporary */
}
很少有C程序员会这样做(没有充分的理由)。相反,他们会自动编写优化代码:
member_init_other(&sp->the_member, ...params...);
<>这个特性存在于C++中,因为编译器为程序员做了很多自动化的事情。这通常会使程序员的工作更轻松,但需要初始化列表等功能来帮助编译器生成最佳代码。C编译器呈现了一个更简单的底层机器模型,自动地做更少的事情,因此需要更少的特征(虽然不一定是更少的工作)来生成类似的最佳代码。在C++构造函数中, < P>,初始化列表允许C++编译器在成员变量的位置上适当地构造成员,复制构造函数或移动构造函数来初始化成员变量,而不是使用赋值运算符。有关更多详细信息,请参阅 在C中,C编译器不提供此类自动操作。这意味着程序员直接控制所有初始化,不需要特殊的语言特性来避免这些额外的操作
更清楚一些,考虑在C++构造函数中使用赋值初始化时发生的事情:
void my_struct_init(struct my_struct* sp)
{
member_init_default(&sp->the_member); /* default constructor for member */
struct member memb; /* temporary on stack */
member_init_other(&memb, ...params...); /* initialize memb */
member_assign(&sp->the_member,&memb); /* assign member */
member_finalize(&memb); /* finalize the temporary */
}
很少有C程序员会这样做(没有充分的理由)。相反,他们会自动编写优化代码:
member_init_other(&sp->the_member, ...params...);
<>这个特性存在于C++中,因为编译器为程序员做了很多自动化的事情。这通常会使程序员的工作更轻松,但需要初始化列表等功能来帮助编译器生成最佳代码。C编译器提供了一种更简单的底层机器模型,自动执行的操作更少,因此生成类似最优代码所需的功能也更少(尽管不一定需要更少的工作)。我怀疑这是一种性能功能。如果