C++11 引入了就地初始化和列表初始化,这些初始化操作使得代码更加清晰、类型更加安全。
就地初始化(Uniform Initialization)
就地初始化是一种新的语法,其语法形式为大括号(也称作花括号)括起来的初始化器表达式。
简单类型变量的就地初始化
对于简单类型变量,可以使用就地初始化进行初始化。
int i{10}; // 就地初始化 i 为 10
double d{3.14}; // 就地初始化 d 为 3.14
bool b1{true}; // 就地初始化 b1 为 true
bool b2{false}; // 就地初始化 b2 为 false
char c{'a'}; // 就地初始化 c 为 'a'
类类型的就地初始化
对于类类型变量,也可以使用就地初始化进行初始化。
#include <string>
class Person {
public:
Person(std::string name, int age): mName(name), mAge(age) {}
private:
std::string mName;
int mAge;
};
int main() {
Person p{"张三", 18}; // 使用就地初始化进行初始化
return 0;
}
列表初始化(List Initialization)
列表初始化使用花括号括起来的值得列表进行初始化操作。
简单类型变量的列表初始化
对于简单类型变量,可以使用列表初始化进行初始化。
int i{1}; // 就地初始化 i
int j{}; // 就地初始化 j 为零
int k{2.0}; // 编译错误,列表初始化不允许 narrowing 转换
类类型的列表初始化
对于类类型变量,也可以使用列表初始化进行初始化。
#include <string>
class Person {
public:
Person(std::string name, int age): mName(name), mAge(age) {}
private:
std::string mName;
int mAge;
};
int main() {
Person p{"张三", 18}; // 使用列表初始化进行初始化
return 0;
}
使用列表初始化可以避免因为类型转换导致无法正确地初始化变量。
综上,就地初始化和列表初始化是 C++11 中引入的一些新的语法,它们使得初始化更加简单明了,同时可以避免类型转换带来的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简述C++11就地初始化与列表初始化 - Python技术站