C++;函数输出 我从大学里很少看到关于C++的练习,我发现这个练习: #include <iostream> using namespace std; int x = -2; int h(int &x) { x = 2 * x; return x; } int g(int f) { return x; } int &f(int &x) { x += ::x; return x; } int main() { int x = 6; f(::x) = h(x); cout << f(x) << endl; cout << g(x) << endl; cout << h(x) << endl; return 0; }

C++;函数输出 我从大学里很少看到关于C++的练习,我发现这个练习: #include <iostream> using namespace std; int x = -2; int h(int &x) { x = 2 * x; return x; } int g(int f) { return x; } int &f(int &x) { x += ::x; return x; } int main() { int x = 6; f(::x) = h(x); cout << f(x) << endl; cout << g(x) << endl; cout << h(x) << endl; return 0; },c++,function,parameters,reference,scope,C++,Function,Parameters,Reference,Scope,有人能解释一下我是如何得到这个输出的吗 而f(::x)=h(x)工作 ::x指的是全局int x,而不是本地x 见: 函数签名不同(通过值或引用传递x)。前者复制,后者不复制,int&x上的更改将反映x引用的内容(作为参数传递的内容) 见: 如果您将int&作为返回类型,您将能够通过此引用进行更改,它将返回到传递给f(通过引用)的任何内容 考虑代码是如何工作的,记住前面提到的内容 ::x指的是全局int x,而不是本地x 见: 函数签名不同(通过值或引用传递x)。前者复制,后者不复制,i

有人能解释一下我是如何得到这个输出的吗

f(::x)=h(x)工作

  • ::x
    指的是全局
    int x
    ,而不是本地
    x

    见:

  • 函数签名不同(通过值或引用传递
    x
    )。前者复制,后者不复制,
    int&x
    上的更改将反映
    x
    引用的内容(作为参数传递的内容)

    见:

  • 如果您将
    int&
    作为返回类型,您将能够通过此引用进行更改,它将返回到传递给
    f
    (通过引用)的任何内容

  • 考虑代码是如何工作的,记住前面提到的内容

  • ::x
    指的是全局
    int x
    ,而不是本地
    x

    见:

  • 函数签名不同(通过值或引用传递
    x
    )。前者复制,后者不复制,
    int&x
    上的更改将反映
    x
    引用的内容(作为参数传递的内容)

    见:

  • 如果您将
    int&
    作为返回类型,您将能够通过此引用进行更改,它将返回到传递给
    f
    (通过引用)的任何内容


  • 想想代码是如何工作的,记住上面提到的。

    还记得局部变量隐藏全局变量吗?你这里所说的就是这个原则在起作用

    以函数为例

    int &f(int &x) {
        x += ::x; 
        return x;
    }
    
    这里,
    int&x
    作为参数传递是函数的本地参数;其中,函数中的as
    ::x
    表示全局变量x


    顺便说一下,<代码>::/Cuff>被称为范围解析运算符,并且在C++中也用于许多其他目的。

    < P>记住局部变量隐藏全局变量吗?你这里所说的就是这个原则在起作用

    以函数为例

    int &f(int &x) {
        x += ::x; 
        return x;
    }
    
    这里,
    int&x
    作为参数传递是函数的本地参数;其中,函数中的as
    ::x
    表示全局变量x


    顺便说一句, >::/>代码被称为作用域解析运算符,并且在C++中也用于许多其他目的。我的意思是f(x)=h(x);这种行为不是由执行

    f
    h
    的标准顺序定义的。@说你接受和不接受我的回答了吗?为什么?数据支持我们将x本地传递给f,输出结果是什么?我的意思是f(x)=h(x);这种行为不是由执行
    f
    h
    的标准顺序定义的。@说你接受和不接受我的回答了吗?为什么?D