この質問はconst_cast
、char *
const char *
. このキャストは暗黙的に行われ、キャストが暗黙的に行われているときにうまく機能することを認識しています。
問題のあるコードは次のとおりです。
#include <cstdlib>
int main() {
const char * org_str = NULL;
org_str = const_cast<const char*>(getenv("ENV_VAR")); // PROBLEM !!
}
Linux のマニュアル ページ にあるように、getenv()
をconst char *
受け取って返しますchar*
。したがって、const-correctness に関する私の理解によればchar*
、問題なく const キャストを実行できます。
それで、私の質問は、なぜconst_cast
ここで私にUBを与えているのですか(コードがクラッシュしています)が、予想通りconst_cast
(暗黙のキャスト)なしで正常に動作します(したがって、問題は の使用にある必要がありますconst_cast
) ?
注意してください、私は暗黙のキャストがここに行く方法であることを知っています.
編集:
このバグは仲間の So'ers では再現できないため、これはランタイム/コンパイラの奇妙な問題であると想定しています。ただし、このような問題が標準に記載されている場合はお知らせください。
当分の間、私はマイクの答えを受け入れています。