有人可以解释c ++运算符在这里如何工作吗?

时间:2019-06-29 17:10:11

标签: c++ operator-overloading operators

我有一个小的C ++代码片段,也许有人可以在这里解释operator =的工作原理吗?

#include <iostream>
#include <string>

    using namespace std;

    static wstring & test() {
        static wstring test2;
        return test2;
   };


   int main()
   {
       test() = L"Then!";
       wcerr << test() << endl;
   }

2 个答案:

答案 0 :(得分:1)

函数test()返回对静态变量test2的引用(不是副本)。静态关键字使函数test在调用之间保持变量test2的值。因此,当您调用test()时,它会返回引用,使您可以在test2内部更改test()的值。这导致wcerr << test2 << endl;打印出“然后!”。

请注意,静态关键字根据上下文具有不同的含义。将函数设为静态会使该函数仅对文件中的其他函数可见。如果将静态函数放在标头中,则该标头的每个#include都会对该函数减速。

您可能想说的是

#include <iostream>
#include <string>

using namespace std;

wstring & test() {
   static wstring test2;
   return test2;
}

int main()
{
   test() = L"Then!";
   wcerr << test() << endl;
}

答案 1 :(得分:0)

函数test()返回对static变量test2引用。引用是指变量;您可以用变量代替引用。

这等效于代码:

static wstring test2;
int main()
{
    test2 = L"Then!";
    wcerr << test2 << endl;
}

在您喜欢的C ++参考中搜索“参考”。