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
相关产品推荐
相关产品推荐

