Effective c++学习笔记 (item1)

2021-08-12  本文已影响0人  懒生活

读书3步,先通读,然后读厚,最后读薄。

Item 1视c++为一个语言联盟

c++的发展历史

一开始c++,只是想在c的基础上引入对象概念,最初的名字是C with Classes
随着c++的成熟,it grew bolder and more adventurous,他变得越来越大胆和冒险。引入了很多C with Classes之外的理念。作者举了3个例子:

C++支持的编程方式

C++支持这么多的编程形式,不同的变成方式下,一些高效率的原则不同,这就使得c++很难掌握,至少在不同的编程理念下,要应用不同的设计原则。

“c++语言联盟”下主要的4种

不同的编程理念下,要应用不同的设计原则。C++又支持很多的编程理念,这对掌握C++提出了很高的要求。Scott Meyers提炼了4种主要的编程理念分类,相当于提炼简化了下C++的学习重点和难度。

对Item1的引申

C++对函数式编程的支持,这里只局一个简单的例子:

C++的高阶函数for_each transform可以接受lambda表达式或者函数做入参。

void printItems(char x)
{
std::cout<<""<<x<<endl;
}
int plusOne(int x)
{
return (x+1);
}
int main()
{
std::list<int>alist = {1,2,3,4};
std:for_each(alist.begin(),alist.end(),printItems);
std::transform(alist.begin(),alist.end(),alist.begin(),plusOne);
}

通过查看for_each的定义,可以知道他的第三个入参是函数。对这个入参函数的要求是只要这个函数接受一个入参,接受的这个入参类型和alist里面的成员类型并不要求一定要一样,只要能隐式转换成功就行。在for_each执行过程中,它遍历到alist的某个元素时,会把这个元素当入参丢入printIItems,并执行一下printItems函数。
transform,他的定义时遍历到alist的某个元素时,把这个元素当入参丢入plusOne,执行的返回,丢入第三个入参定义的迭代器指向的位置,同时更新该迭代器+1。

上一篇 下一篇

猜你喜欢

热点阅读