C++ swapp函数参数a、b存值还是地址?属于什么类型变量?
问题1:swapp的参数a、b属于什么类型的变量?
你代码中形参声明里的&是C++的引用声明符,并非取地址运算符,因此a、b是**T1类型的左值引用变量**。
当你传入int类型的x、y调用swapp时,模板参数T1会被自动推导为int,此时a就是int&类型(int的左值引用),是实参x的别名;b是int&类型,是实参y的别名。
问题2:a、b存储的是值还是地址?
这个问题可以从两个维度说明:
- 语法层面:C++标准明确规定引用是目标变量的别名,不占用独立的内存空间,和绑定的原变量共用同一块内存地址。你操作a、b本质就是直接操作原变量
x、y,语法层面不存在“存储值/地址”的概念。 - 编译器底层实现:目前市面上几乎所有主流C++编译器都会用指针逻辑实现引用,也就是说底层实际存储的是原变量的内存地址,只是编译器在语法层面自动完成了解引用操作,不需要你手动写指针相关的解引用语法。
补充说明
正因为用了引用传参,你这段代码执行后x和y的值会成功交换,最终输出结果为10 5;如果是值传递的话,函数内操作的只是实参的副本,不会影响main函数里的x、y原值。
内容的提问来源于stack exchange,提问作者YashRM
相关产品推荐
相关产品推荐

