リターンキャスト(==>)は未定義の動作に配置できますか?コードのアイデアは非常に簡単で、侵入型リスト(plist)を繰り返し、要素が見つかるとその要素を返します。コードは反復するだけなので、リストを変更しないので、constポインタとして渡したいと思います。関数は、オブジェクトを取得し、CONSTとして使用するために使用されるconstキャスト未定義の動作
static my_custom_type_t* get_object_by_id(const my_custom_type_t* plist, const char *my_id)
{
const my_custom_type_t* obj = NULL;
for (obj = plist; obj && strncmp(obj->id, my_id, MAX_SIZE); obj = obj->next)
{
; //empty body
}
==> return ((my_custom_type_t*) obj);
}
:
:関数はオブジェクトを取得し、非constオブジェクトとしてそれを使用するために使用されるconst my_custom_type_t* obj = get_object_by_id(intrusive_list, some_id);
my_custom_type_t* obj = get_object_by_id(intrusive_list, some_id);
"const-correctness"とは何かを考えます。もちろん、あなたのコードはそれを壊します!あなたがすべての意味を完全に認識していない場合は、キャストを使用しないでください。 – Olaf
この場合constはリスト構造です。関数はリストを変更していないので壊れていないので、そうではありませんか?私はこのメソッドの外の誰かが後で侵入リストを変更するためにポインタを使うことができますが、関数get_object_by_idは "前/次"ポインタを変更していないことを意味します。 – redobot
なぜあなたは 'const'ポインタも返すだけですか? – Dolda2000