我對下面的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
但我得到:
Hello
Nooo
你能解釋,爲什麼變量c
的價值已經過兩次功能之間修改調用,即使它是一個const
變量?
其實它不是未定義的。 **解除引用**它是未定義的。由於它在解引用時總是有一個有效的地址,所以它是一個有效的程序。 – StoryTeller
@StoryTeller,'cout << c << endl;'提供指針的引用。 –
@StoryTeller輸出操作符使用解引用。 –