gpt4 book ai didi

c++ - C 方法有时比 C++ 方法有优势吗?

转载 作者:太空狗 更新时间:2023-10-29 21:27:26 24 4
gpt4 key购买 nike

<分区>

最近我一直在思考这个问题。我们大多数人都清楚,在 C 中,为了创建一个结构,您通常会在它前面加上一个 typedef 以避免调用 struct引用对象之前的关键字。当然,C 仅限于结构而不是类。为了弥补这一点,C 倾向于使用专用于结构的全局函数来创建面向对象的方法

例如:

typedef struct{
int foo;
float bar;
char* baz;
} SomeStruct;

对比

struct AnotherStruct {
int foo;
float bar;
char* baz;
};

AnotherStruct 在函数中声明该类型的对象时,必须在其前面加上前缀关键字 struct。例如:

int main( ... )
{
struct AnotherStruct obj1; //correct
SomeStruct obj2; //correct
struct SomeStruct obj3; //bad
AnotherStruct obj4; //bad
}

在面向对象的方法方面:

typedef struct {
//member variables here
} SomeStruct;

SomeStruct* SomeStruct_New( int a, int b, int c )
{
SomeStruct* obj = calloc( sizeof( SomeStruct ), 1 ); //not sure if that's correct -- been a while since I've used calloc.
obj.a = a;
obj.b = b;
obj.c = c;
return obj;
}

void SomeStruct_Free( SomeStruct* free )
{
free( free );
}

这些函数在没有包装器的情况下很容易实现——我只是为了举例而使用它们。我的观点是,鉴于您已经可以在 C++ 中创建一个结构,它不需要 typedef 在没有 struct 关键字的情况下进行声明,并且使用相关的非封装函数对于面向对象方法的这些结构,我很想知道 C++ 中的 C 编码方法是否有任何优势,其中包括使用静态全局函数作为私有(private)成员函数,以及全局函数构造函数将返回指向对象的指针。

这主要是出于好奇,因为有时候我想采用 C 方法只是为了采用它,但这可能只是一种优先考虑。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com