629
社区成员
发帖
与我相关
我的任务
分享
vector<int> ivec(10, -1); //10个int 类型的元素,每个都被初始化为-1
vector<string> svec(10, "hi!"); //10 个string类型的元素,每个都被初始化为 hi!
您说“C++11标准明确规定了“初始化列表”(initializer list),就是大括号中一堆用逗号隔开的数据。”但书里后来在92页说明这两个语句其实还是 值初始化(value-initialized)
vector<string> v7{10}; // v7 有10 个默认初始化的元素
vector<string> v8{10, "hi"}; // v8 有10 个值为"hi"的元素
[/quote]
嗯嗯,我说的有问题。这确实不是“初始化列表”,这应该是“值初始化”。
vector<int> ivec(10, -1); //10个int 类型的元素,每个都被初始化为-1
vector<string> svec(10, "hi!"); //10 个string类型的元素,每个都被初始化为 hi!
您说“C++11标准明确规定了“初始化列表”(initializer list),就是大括号中一堆用逗号隔开的数据。”但书里后来在92页说明这两个语句其实还是 值初始化(value-initialized)
vector<string> v7{10}; // v7 有10 个默认初始化的元素
vector<string> v8{10, "hi"}; // v8 有10 个值为"hi"的元素
struct NoCopy {
NoCopy() = default; // use the synthesized default constructor
NoCopy(const NoCopy&) = delete; // no copy
NoCopy &operator=(const NoCopy&) = delete; // no assignment
~NoCopy() = default; // use the synthesized destructor
// other members
};
auto func(int i) -> int(*)[10];
第七章
委任型构造函数(Delegating Constructors)
class Sales_data {
public:
// nondelegating constructor initializes members from corresponding arguments
Sales_data(std::string s, unsigned cnt, double price):
bookNo(s), units_sold(cnt), revenue(cnt*price) {
}
// remaining constructors all delegate to another constructor
Sales_data(): Sales_data("", 0, 0) {}
Sales_data(std::string s): Sales_data(s, 0,0) {}
Sales_data(std::istream &is): Sales_data()
{ read(is, *this); }
// other members as before
};
第十章
lambda表达式(Lambda Expressions)
格式:
[捕获列表] (形参列表) -> 返回值类型 { 函数体 }
样例一:
auto f = [] { return 42; };
cout << f() << endl; // prints 42
样例二:
// sort words by size, but maintain alphabetical order for words of the same size
stable_sort(words.begin(), words.end(),
[](const string &a, const string &b)
{ return a.size() < b.size();});
样例三:
void fcn1()
{
size_t v1 = 42; // local variable
// copies v1 into the callable object named f
auto f = [v1] { return v1; };
v1 = 0;
auto j = f(); // j is 42; f stored a copy of v1 when we created it
}
捕获列表的格式:
[] 什么变量也不传入
[&] 全部变量传引用进去
[=] 全部变量传值进去
[&,identifier_list] 除了identifier_list传值,其余的传入引用
[=,&reference_list] 除了reference_list传入引用,其余的传值
第十三章
默认构造函数(=default)、禁用某些构造函数(=delete)。
class Sales_data {
public:
// copy control; use defaults
Sales_data() = default;
Sales_data(const Sales_data&) = default;
Sales_data& operator=(const Sales_data &);
~Sales_data() = default;
// other members as before
};
Sales_data& Sales_data::operator=(const Sales_data&) = default;