C++程序设计语言 Bjarne Stroustrup
杨晴朗Solo
这个作者很懒,什么都没留下…
展开
-
内存管理
内存管理 自由存储的问题主要包括: 对象泄露(leaked object):使用new,但是忘了用delete释放掉分配的对象 提前释放(premature deletion):在尚有其他指针指向该对象并且后续仍会使用该对象的情况下过早的delete 重复释放(double deletion):同一对象被释放两次,两次调用对象的析构函数(若有的话) 编程建议 若非万不得已不要把对象放在自由存储上,优先使用作用域内的变量 RAII规则:当在自由存储上构建对象时,把它的指针放在一个管理器对象(句柄)中,此原创 2021-01-29 15:29:25 · 49 阅读 · 0 评论 -
c++11/14 constexpr用法
constexpr是C++11开始提出的关键字,其意义与14版本有一些区别。 C++11中的constexpr指定的函数返回值和参数必须要保证是字面值,而且必须有且只有一行return代码,这给函数的设计者带来了更多的限制,比如通常只能通过return 三目运算符+递归来计算返回的字面值。 而C++14中只要保证返回值和参数是字面值就行了,函数体中可以加入更多的语句,方便了更灵活的计算。 很多人都把constexpr和const相比较。 其实,const并不能代表“常量”,它仅仅是对变量的一个修饰,告诉编译转载 2021-01-29 12:34:09 · 529 阅读 · 0 评论 -
范围for语句
范围for语句 for(int x : v) // 对于范围v中的每个元素x 程序从头到尾依次访问v的全部元素。 冒号之后的表达式必须是一个序列(一个范围),换句话说,如果对其调用v.begin()和v.end(),得到的应该是迭代器。 编译器首先尝试寻找并使用成员begin和end,但是他们不能表示一个范围(比如begin有可能是变量而非函数),则当前的范围for是错误的。 如果没有找到,则编译器继续在外层作用域寻找begin/end成员。如果找不到或者找到的不能用(比如begin不接受当前序列类型的实原创 2021-01-24 13:20:13 · 1212 阅读 · 0 评论