C++
文章平均质量分 86
c++ 的一些基础内容,里面有哪些内容有问题欢迎指出。github 仓库:https://github.com/Rorsachach/cpp
Rorschach!
这个作者很懒,什么都没留下…
展开
-
More Effective C++——2. 操作符
c++允许编译器在不同类型之间执行隐式转换。但是部分隐式转换存在安全性问题,例如 int–>short,然而,自己设计类型时可以尝试提供特定的 “函数” 来作为隐式类型转换使用,并保证安全性。tip]尽管如此,最好不要提供任何类型转换函数。实现定制的类型转换函数有两种方案。原创 2023-03-13 09:55:36 · 242 阅读 · 1 评论 -
Cpp 开发环境搭建
C++ 环境搭建原创 2022-07-03 18:52:58 · 540 阅读 · 0 评论 -
Effective-c++——1. 让自己习惯c++
如果你能够按照上面的这些约束进行编码,那么只剩最后一件值得关心的事情 “不同编译单元内定义之 non-local static对象” 的初始化次序。static 对象是指 global 对象,定义于 namespace 作用域内的对象,在 class 内、函数内、以及在 file 作用域内被声明为 static 的对象。他们的寿命从构造出来直至程序结束为止。其中在函数内的 static 对象被称为 local static 对象。而其他则都被称为 non-local static 对象。原创 2023-02-22 14:23:05 · 98 阅读 · 0 评论 -
Effective-c++——2. 构造/析构/赋值运算
编译器创建的这些函数中 default constructor/destructor 主要用来给编译器用来防止 “幕后” 代码,例如调用 baseclasses 和 non-static 成员变量的构造函数和析构函数。至于 copy 构造函数 和 copy assignment 操作符,编译器创建的版本只是简单的将每一个 non-static 成员变量拷贝到目标对象。当编译器无法产生合适的 copy assignment 时,它会放弃产生。原创 2023-02-27 12:31:48 · 123 阅读 · 0 评论 -
Effective-c++——3. 资源管理
在程序编写过程中需要面对大量资源的管理问题,包括内存、文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接、网络sockets。经过训练后,基于对象的资源管理办法,几乎可以消除资源管理问题。原创 2023-02-28 09:30:39 · 320 阅读 · 0 评论 -
Effective c++——4. 设计与声明
设计接口的理想原则是,如果客户企图使用某个接口而没有获得他所预期的行为,这个代码就不应该通过编译;如果代码通过了编译,它的作用就该是客户想要的。这就要求首先必须考虑客户可能做出的错误。可以通过导入新类型而获得预防。这样做就起到了警示作用,同时又限定了传递顺序。限定了传递顺序后,我们可以进一步对使用的值进行限定。简单的方法是使用 enum 来限定,但是 enum 并不具备类型安全性,例如enums 可以被用来当作一个 ints 使用。因此可以重新设计一个类。原创 2023-03-01 09:27:58 · 117 阅读 · 0 评论 -
Effective c++——5. 实现
只要你定义一个变量,而其类型带有一个构造函数或者析构函数,那么当程序控制流到达这个位置时,就会产生构造成本。离开作用域时你又需要承受析构成本。甚至你从未使用过这个变量。上述代码就可能产生一个完全没有被使用的变量 encrypted。通过修改顺序,将 encrypted 的定义式向后移动,可以避免这种事情的发生。但是上述代码效率仍旧不高,因为 encrypted 并没有初始化,这意味着它会先调用 default constructor,然后再调用 operator=。原创 2023-03-02 10:20:39 · 139 阅读 · 0 评论 -
Effective c++——6. 继承和面向对象设计
pb -> mf();pd -> mf();上面的代码中,两次调用结果不一样。这主要是因为 non-virtual 函数是 静态绑定 的,这也就意味着使用 B pointer 来调用就会调用 B::mf,而用 D pointer 力调用则是 D::mf。另一方面 virtual却是 动态绑定 的,所以 virtual function 并不会产生这个问题。原创 2023-03-03 09:21:02 · 137 阅读 · 0 评论 -
Effective c++——7. 模板与泛型编程
当我们编写一个 class template,而它所提供之 “与此 template 相关的” 函数支持 “所有参数之隐式类型转换” 时,请将那些函数定义为 “class template 内部的 friend 函数”。在条款24中讨论了为什么只有 non-member 函数才有能力 在所有实参身上实施隐式类型转换。但是在模板化过程中,条款24似乎就不再适用了。public :上述代码无法通过编译,它并没有像非模板那样按照预期运行。这主要是因为,模板的运行过程是先根据传。原创 2023-03-06 13:41:49 · 208 阅读 · 2 评论 -
Effective c++——8. 定制的 new 和 delete
当 operator new 无法满足某一内存分配需求时,它会抛出异常。对于旧式操作,该行为会返回一个 null指针。我们可以通过修改错误处理函数来改变这种默认行为,从而获得旧式操作体验。当 operator new 的行为无法被满足时,它会先调用一个客户指定的错误处理函数,所谓的 new-handler。客户可以通过调用 set_new_handler 来指定函数。你可以这样设置 new-handler。原创 2023-03-07 13:00:03 · 137 阅读 · 0 评论 -
Effective c++——9. 杂项讨论
许多程序员会忽略编译器警告,但是有时候警告会产生运行时异常。编译器可能会说 warning: D::f() hides virtual B::f(),看上去这是理所应当的事情,但是实际上它想告诉你,这并非是重写操作,这种名称掩盖会导致最终结果与期望不一的情况。尽管写出一个完全没有警告的代码是十分困难的,但是你应该去理解这些警告的含义,并在完全理解后来判断是否应该忽略这些警告,否则造成错误后很有可能就是警告造成的。原创 2023-03-08 10:28:09 · 171 阅读 · 0 评论 -
More Effective C++——1. 基础议题
因此,应当谨慎的提供 default constructors,非必要,不要提供无意义的 default constructors。如果实现的对象不能进行 “从无到有” 的转变,则不应该提供一个 default constructor。的情况在 数组的删除过程中 也同样会存在,因为实际执行的是循环调用每个对象的 destructor。上述代码会出现问题,因为“指针算术表达式”的含义是对指针进行后移,而后移的距离与数组中对象的大小有。因为这意味着,使用者需要对某些内容进行测试以确定对象的合法性。原创 2023-02-28 11:07:45 · 108 阅读 · 0 评论 -
Unix环境高级编程——文件I/O
文件I/O原创 2022-10-27 21:56:44 · 837 阅读 · 0 评论