为什么第二个对name()的调用显示“ Alex n”?

时间:2018-12-09 01:48:00

标签: c++

#include <stdio.h>
#include <iostream>

using namespace std;

const char *& name () {
    static const char * n = " Justin " ;
    cout << n << " .\ n " ;
    return n ;
}

int main()
{
    name () = " Alex "; //prints Justin . n
    name(); //prints Alex . n
}

因此,对name()的第一次调用似乎将返回的参考变量n分配给了Alex,但随后对name()的第二次调用并未打印出name()内部指定的“ Justin。n”。我不明白为什么它不只在第二次调用name()时打印“ Justin。n”。

1 个答案:

答案 0 :(得分:0)

您将变量n静态声明在name()内,该变量指向C字符串" Justin ",然后使其指向C字符串" Alex "

因此,自然地,当您稍后对其进行检查时,它仍然指向C字符串" Alex "

请记住,您是静态声明 。这意味着name()的每次调用都共享相同的变量。

如果每次进入函数时,函数静态变量要重新获取其初始化程序的值,则绝对没有必要将它们设为静态!