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

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

我无法使用 typedef 传递指向常量的指针,因此某些函数如下所示:
void UsePointerToConst ( const struct MyOpaqueType * )

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

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

最佳答案



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



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

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

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

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

    10-14 16:37