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

将引用的地址作为指针传递是否会产生未定义行为?

引用取地址传入指针函数是否会触发未定义行为?

结论很明确:你的这段代码完全不会触发未定义行为。

原因很简单:C++里的引用只是原变量的别名,它本身不是一个独立的对象。当你对引用执行&a_ref操作时,编译器会直接返回被引用变量a的内存地址——这和你写&a是完全等价的。

放到你的代码里看:

#include <iostream>
using namespace std;

void swap(int *x, int *y)
{
    int z = *x;
    *x = *y;
    *y = z;
}

// Driver Code
int main()
{
    int a = 45, b = 35;
    auto& a_ref = a;
    cout << "a = " << a_ref << " b = " << b << "\n";

    swap(&a_ref, &b); // 等价于 swap(&a, &b)

    cout << "After Swap with pass by pointer\n";
    cout << "a = " << a << " b = " << b << "\n";
}

调用swap(&a_ref, &b)时,传入的第一个指针就是a的地址,第二个是b的地址,swap函数内部的指针操作完全合法,最终会正确交换a和b的值,整个过程完全符合C++标准,没有任何未定义的风险。

另外补充一点:虽然不同编译器对引用的实现可能有差异,但C++标准明确规定,对引用取地址的结果就是被引用对象的地址,所以不管在哪种合规的编译器下,这个操作的行为都是确定的。

内容的提问来源于stack exchange,提问作者tesla1060

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:16:03