gpt4 book ai didi

c++ - 函数参数中的 struct 关键字和常量正确性

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:04 28 4
gpt4 key购买 nike

我的库中有一个不透明类型定义为:

typedef struct MyOpaqueType* MyType;  // easier to type for client code

我不能使用 typedef 传递指向 const 结构的指针,所以一些函数看起来像:

void UsePointerToConst ( const struct MyOpaqueType * )

代替:

void UserPointerToConst( const MyType ) // can't use, is really constant pointer

所以,鉴于此,我有两个问题:参数列表中的struct关键字是否只在C中是必需的?有一个更好的方法吗?我应该创建一个 typedef,例如:

typedef const struct MyOpaqueType* ConstantMyType; ?

最佳答案

Is the struct keyword in the parameter list only necessary in C?

是的。请参阅 Jens Gustedt 的回答。

Is there a better way to do this?

只是 typedef 结构,而不是指针。这样更好,因为

  • 你只需要一个 typedef 而不是每个 {MyOpaqueType, MyOpaqueType *, MyOpaqueType const *MyOpaqueType *constMyOpaqueType const *const} 以及涉及 restrict 的所有变体(C++ 中不存在),
  • 用户很清楚指针语义适用,即传递数据类型实际上是指针复制的问题(无性能担忧),用户不太可能在使用后忘记清理,C++ 用户可能会使用智能指针,和
  • 这是一个常见的 C 约定(想想 FILE *)。

也没有危险;当有人忘记 * 时,他们会得到一个编译器错误。

关于c++ - 函数参数中的 struct 关键字和常量正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526225/

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