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

带大括号初始化的vector常量引用参数为何可行?

为什么const左值引用能绑定初始化列表?

你提到的核心点没错:普通非const左值引用确实只能绑定到有内存地址的左值,但const修饰的左值引用是C++里的特殊情况——它允许绑定到临时对象(右值),这是标准特意设计的规则,目的是兼顾效率和代码便利性。

具体到你的代码,执行过程是这样的:

  • 调用func({1})时,编译器会先用初始化列表{1}构造一个临时的vector<int>对象,这个临时对象属于右值。
  • const vector<int>&这种const左值引用,会绑定到这个临时对象上,并且自动延长临时对象的生命周期,直到func函数执行完毕,避免了临时对象被提前销毁。

再举个更简单的同类例子,你就能明白这是普遍规则,不是vector独有的:

void func(const int& x) {}
int main() {
    func(10); // 10是右值,同样可以绑定到const左值引用
    return 0;
}

总结一下:普通左值引用为了保证可修改性,只能绑定左值;而const左值引用因为不会修改引用对象,所以允许绑定临时对象/右值,这是C++标准里明确规定的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:12:02