は基本的に私はconst
修飾子を維持しながらC++でconstのポインタにポインタを置くことはできますか?
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))};
// ...
のようなものが可能であるかどうかを疑問に思って。
私の質問は、C++のC-Arraysに関する練習中に出てきました。 Cのために、私はconst void*
引数を持つ関数ポインタを渡さなければなりませんでした。この場合、C-ストリングの配列を指していました。正しいタイプにキャストするために、私はコンスタンタンをキャストしなければなりませんでした。 C++で "(const char *)*"ポインタのようなものを得る方法はありますか?
私はconst char**
'**のconst char型' と入力するタイプ 'のconstボイド*' から
reinterpret_castはを生み出す(const_castをせずに)出て試してみましたが、修飾子
と(const*)*
を離れてキャスト構文エラーが発生しました
'('トークン前にトークン
これは純粋に学問的な質問です。私は、std::string
と#include <algorithm>
を使用して問題を簡単かつ安全に解決できることを認識しています。
私はそれに就いていますが、時々C++でC構造を使用する利点があるのでしょうか、あるいは可能なら避けるべきですか?私はC++でのCコードの小規模な運動の問題を抱えていましたが、かなりの頭痛の原因となり、私の人生でCコードをかなり書いていましたが、 または、extern C
修飾子を使用し、Cコードを純粋なC言語で記述することをお勧めしますか?
'const void *'は 'char * const *'になります。 ( 'const'修飾子を一貫して配置するともっと明らかです:' void const * '。) – Ryan
私は理解しています。これを 'void const * 'として書き直すことは、まさに私の混乱を解決するものです。ありがとう! – maow
"には、C++でC構造を使うことがあるという利点があります。しかし、あなたは常にそれらを避け、Cの構文が読みやすさ、型の正確さ、または保守容易性の点でどれくらいのコストを要しているかを知る必要があります。 'void * 'の場合は3つすべてが失われます。 – dascandy