C++11: Default Member Initializers(类成员就地初始化)

本文介绍了C++11引入的类成员就地初始化特性,相较于C++03,现在非静态成员可以在声明时进行初始化。‘就地初始化’这一概念在多个资源中有所提及,如《深入理解C++11》和官方文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是就地初始化

在C++03标准中,只有静态常量整型成员才能在类中就地初始化

class X {
  static const int a = 7;        // ok
  const int b = 7;               // 错误: 非 static
  static int c = 7;              // 错误: 非 const
  static const string d = "odd"; // 错误: 非整型
};

C++11标准中,非静态成员可以在它声明的时候初始化
“就地初始化”的术语的来源有多处:
(1) 就地初始化:《深入理解C++11》
(2) In-class initializer : https://isocpp.org/
(3) default member initializer : https://cppreference.com

例子和规则

class S { 
 int m = 7; // ok, copy-initializes m  
 int n(7);  // 错误:不允许用小括号初始化  
 std::string s{'a', 'b', 'c'}; // ok, direct list-initializes s
 std::string t{"Constructor run"}; // ok
 int a[] = {1,2,3}; // 错误:数组类型成员不能自动推断大小 
 int b[3] = {1,2,3}; // ok
 // 引用类型的成员有一些额外限制,参考标准
public:
 S() { } 
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值