我对下面的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输出操作符使用解引用。 –