You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:15:04