基本上我想知道是否像
f(const void* a){
// This is also what `(char**) a` would do behind the scenes
char** string_a_ptr {reinterpret_cast<char**>(const_cast<void*>(a))};
// ...
在保留const
限定符的同时是可能的。
我的问题是在关于 C++ 中的 C-Arrays 的练习中提出的。因为 C,我不得不传递一个带const void*
参数的函数指针。在这种情况下,它指向一个 C 字符串数组。要将其转换为正确的类型,我必须将 const 丢弃。C++ 中有没有办法获得类似“(const char*)*”的指针?
我已经尝试过const char**
(没有 const_cast)产生
reinterpret_cast 从类型 'const void*' 到类型 'const char**' 抛弃限定符
和(const*)*
,这给出了一个语法错误
'(' 标记之前的预期类型说明符
这是一个纯粹的学术问题。我知道,使用std::string
and可以更轻松、更省钱地解决问题#include <algorithm>
。
当我这样做时,有时在 C++ 中使用 C 构造是否有优势,或者如果可能的话,是否应该始终避免使用它们?我只用 C++ 中的 C 代码做了一些小规模的练习题,但它已经引起了相当多的头痛,并迫使我仔细研究引擎盖,即使我已经编写了相当多的 C 代码。还是您更愿意推荐使用extern C
限定符并用纯 C 编写 C 代码?