【问题标题】:Type-casting pointer to array member in C++ and operator precedenceC++中指向数组成员的类型转换指针和运算符优先级
【发布时间】:2014-11-04 07:38:58
【问题描述】:

我必须对 const 数组的成员进行类型转换。但是,precedence 在这里的工作方式让我感到困惑。以下 2 个选项是否导致相同的指针?

const char *pPacket;
char * destination_pointer;

选项 1:

destination_pointer = &pPacket[index];

选项2:

destination_pointer = (char *)&pPacket[index];

【问题讨论】:

  • 同样,不需要强制转换。 memcpy 将内存块从一个地方复制到另一个地方,它不关心源或目标的底层类型。
  • 这只是为了消除 LINT(静态代码分析工具)警告!
  • 为什么不改签名(myClass::GetPacket(char *pPacket))?
  • @Aad:警告是有充分理由的。因为(大概)是编译器错误。如果函数不将其视为const,为什么函数会采用const 指针?
  • 无论如何你都应该使用const_cast 而不是C-cast。

标签: c++ arrays pointers casting type-conversion


【解决方案1】:

是的,应该是一样的。

选项二只是将数组的元素显式转换为char *

const char *pPacket; 创建一个指向不能通过指针修改的常量数据的指针。因此,只要您不更改内存中的内容,就可以了。

【讨论】:

    【解决方案2】:

    添加/删除 const/volatile 不会更改指针/引用的值。

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 2019-06-06
      • 2014-01-24
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      相关资源
      最近更新 更多