首页 文章

为什么第二次调用name()打印“Alex . N”?

提问于
浏览
-5
#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” . 我不明白为什么它不只是打印“Justin.n”第二次调用name() .

1 回答

  • 0

    你拿了变量 n ,在 name() 内静态声明,它指向一个C字符串 " Justin " ,然后使它指向一个C字符串 " Alex " .

    所以,当然,当你稍后检查它时,它仍然指向一个C字符串 " Alex " .

    记住,你是静态地宣布它 . 这意味着 name() 的每次调用都会共享同一个变量 .

    如果函数静态变量在每次进入函数时重新获取其初始化值,那么将它们设置为静态绝对没有意义!

相关问题