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

C++中Foo(int* ptr):ptr_{ptr}{}与int* ptr_{}语法含义是什么?

语法说明

1. int* ptr_{}; 的作用

这是C11引入的类内默认成员初始化语法,采用了C11新增的统一列表初始化(花括号初始化)规则:

  • 当创建Foo类对象时,如果构造函数没有显式给ptr_成员赋值,这个初始化器会自动把ptr_值初始化为nullptr,避免出现未初始化的野指针,比传统的只声明int* ptr_;的写法安全性更高。
  • 花括号初始化还自带防止隐式窄化转换的特性,此处为指针类型,核心作用是提供安全的默认初始值。

2. Foo(int* ptr):ptr_{ptr}{} 的作用

这是Foo类的带参构造函数,拆解含义如下:

  • 冒号:之后的部分是构造函数初始化列表,作用是在构造函数体执行前完成类成员变量的初始化,相比在构造函数体内给成员赋值的写法效率更高,也是初始化const成员、引用成员的唯一合法方式。
  • ptr_{ptr} 表示用构造函数的入参ptr的值,初始化类的私有成员ptr_,这里同样用了列表初始化的语法。
  • 末尾的{}是构造函数的函数体,因为当前构造逻辑只需要完成ptr_的初始化,没有其他额外操作,所以函数体为空。

补充原示例的const规则说明

const成员函数的约束是「不允许修改类成员变量本身的值」,这里ptr_是指针类型,const约束的是ptr_存储的地址值不能修改,但是它指向的内存空间的内容不受这个const限制,所以*ptr_ = v的操作完全合法,这也是原示例要说明的核心知识点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:27:03