簡體   English   中英

將 C 樣式的指針數組轉換為 const

[英]Cast C-style array of pointers to const

我目前正在使用 C-API (OpenSSL) 並且有很多函數聲明如下:

// From bytes to TYPE
TYPE *d2i_TYPE(TYPE **a, unsigned char **ppin, long length);
// From TYPE to bytes
int i2d_TYPE(TYPE *a, unsigned char **ppout);

但有時,函數需要一個指向某個 const 類型的指針數組的指針:

// From bytes to TYPE
TYPE *d2i_TYPE(TYPE **a, const unsigned char **ppin, long length);

注意const unsigned char ** vs unsigned char **並忽略函數的第一個參數。

現在考慮以下示例,其中一些輸入數據作為非常量指針給出。 將指針數組轉換為指針數組的正確方法是什么? 而且,由於 function 需要一個指針,所以參數必須是一個左值。 我猜這就是沒有隱式演員表的原因..

int length = 42;
unsigned char * data = new unsigned char[length];

// Error C2664: cannot convert argument 2 from 'unsigned char **' to 'const unsigned char **'
TYPE * my_typeE = d2i_TYPE(nullptr, &data, length);

// My solution:
auto x = reinterpret_cast<unsigned char const *>(data);
auto y = const_cast<unsigned char const *>(data);
TYPE * my_typeX = d2i_TYPE(nullptr, &x, length);
TYPE * my_typeY = d2i_TYPE(nullptr, &y, length);

還有其他可能更容易閱讀的解決方案嗎?

無需演員表:

const unsigned char* z = data;
[[maybe_unused]]TYPE * my_typeZ = d2i_TYPE(nullptr, &z, length);

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM