【问题标题】:C++ typedef syntax rulesC++ typedef 语法规则
【发布时间】:2012-05-23 00:11:04
【问题描述】:

在我的一生中,我无法很好地解释将 typedef 转换为 C++ 语句的规则。我理解的简单案例。但请从Danny Kalev 考虑这一点:

typedef char * pstr;
int mystrcmp(const pstr, const pstr); //wrong!

丹尼·卡列夫接着写道:

序列 const pstr 实际上表示 char * const(一个指向 char 的 const 指针); 不是 const char *(指向 const char 的指针。

我在任何地方都找不到解释为什么“const pstr”会被转换为“char * const”的规则。

感谢您的帮助。

【问题讨论】:

  • 这似乎合乎逻辑,不是吗?您将 pstr 类型定义为指向 char 的指针。所以const pstr 是一个指向 char 的 const 指针,char * const
  • 简单的经验法则。 typedef != #define。如果你想要你所描述的,你必须使用宏。
  • 如果您始终使用 post-const 形式,它会更有意义。 pstr const == char * const。 pre-const 形式是一个例外,因此它会使事情变得混乱。

标签: c++


【解决方案1】:

这是因为pstrchar* 的别名,而const pstr 有点像说const (char*) 而不是(const char)*

【讨论】:

  • 谢谢。这为事情提供了一些启示。我仍然想知道是否有文档显示“const pstr”扩展为“const (char *)”而不是“const char *”。
【解决方案2】:

typedef 不像宏。它不只是执行简单的文本替换。 typedef 定义了一个单元,附加的const 应用于整个事物。定义的单元是一个指针,因此将const 应用到它会给您一个 const 指针。

您期望的结果将需要const“到达内部”pstr 类型以应用于内部事物。在该类型中声明的指针级别越多,情况会变得更糟。考虑typedef char*** pppstr。要使其成为char const***const 必须在pppstr 类型内插入三层。无论类型定义有多复杂,规则最好始终将const 应用于外部级别。

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2016-08-23
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多