掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
char **からconst char **への変換が暗黙に出来ないのはなぜ? (ID:54835)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
C++についての質問です。 通常、以下のコードは警告も無くコンパイル可能だと思います。 static void funcchild2(const char *str) { puts(str); } static void funcparent2() { char *str="Atring"; str[0]='S'; funcchild2(str); } しかし、以下のコードはエラーが出ます。 static void funcchild(const char **aStr) { puts(aStr[0]); puts(aStr[1]); puts(aStr[2]); puts(aStr[3]); } static void funcparent() { char *aStr[]= { "Atring1", "String2", "String3", "String4" }; *aStr[0]='S'; funcchild((char**)aStr); } ポインタが2重になっている場合、constを明示的にキャストしないとエラーになるようです。 そういうものといわれればそれまでなのですが、引数の値を変更しない関数ではその引数はconstで宣言しておきたいですし、だからといってそのために呼び出し元でわざわざconst付にキャストするのはあまり美しくないように思います。 なぜこのような仕様になっているのか、わかる方がいらっしゃったら教えてください。 Visual C++ .NET と CodeWarriorで同様のエラーが出ることを確認しております。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.