为什么即使我通过引用传递,我的变量的值也不会改变

Jay*_*Yay 1 c++

#include <iostream>

char toupper(char& letter){
    switch(letter){
        case 'a':
            return 'A';
            break;
        case 'b':
            return 'B';
            break;
        case 'c':
            return 'C';
            break;
        default:
            return letter;
        }
}

int main()
{

char labRat = 'a';
std::cout << toupper(labRat) << std::endl;
std::cout << labRat;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

#include <iostream>

char toupper(char& letter){
    switch(letter){
        case 'a':
            return 'A';
            break;
        case 'b':
            return 'B';
            break;
        case 'c':
            return 'C';
            break;
        default:
            return letter;
        }
}

int main()
{

char labRat = 'a';
std::cout << toupper(labRat) << std::endl;
std::cout << labRat;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

即使我通过引用将它传递给我的函数,我的变量的值也不会改变。为什么不是我的第二个输出行A

Bat*_*eba 5

你确实通过labRat参照的功能,但你不改变的值letter(这是指labRat在调用者)中toupper

这不是每个人的口味1,但代码像

return letter = 'A';
Run Code Online (Sandbox Code Playgroud)

是返回值以及设置参考值的一种方式。所述分配表达letter = 'A'具有值'A'和类型char


1一些软件公司禁止return声明中的赋值,因为它们可能不清楚。也很容易将它们误读为return letter == 'A';.