私は、次のC++コードについて少し混乱しています:初期化は
#include <iostream>
using namespace std;
void test(const string& str)
{
static const char * const c = str.c_str();
cout << c << endl;
}
int main(int argc, char* argv[])
{
test("Hello");
test("Nooo");
return 0;
}
変数c
以来static
とconst
として宣言され、これは一度だけ初期化するべきではありませんし、その初期値を保ちますプロセスが完了するまで?この推論によると、私は次の出力期待していた:
Hello
Hello
をしかし、私は得た:変数c
の値が2つの機能の間で変更された理由を
Hello
Nooo
あなたは明確にできても、それにもかかわらず呼び出します変数はconst
ですか?
実際には未定義ではありません。 **参照解除**は未定義です。逆参照されると常に有効なアドレスを持つので、有効なプログラムです。 – StoryTeller
@StoryTeller、 'cout << c << endl;'はポインタを逆参照します。 –
@StoryTeller出力演算子は逆参照を使用します。 –