| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++ Server】八、实战 -> 正文阅读 |
|
[C++知识库]【C++ Server】八、实战 |
八、实战 class Log ??????? qDebug() << m_id << " create"; ??? ~Log() ??? void log(const QString& info) private: void test1() void test2() int main(int argc, char *argv[]) ??? { ??? return a.exec(); 2、int型转string:std::to_string(i); 3、要尽量缩小锁的范围。 4、如果一个类有虚函数,它的大小至少就是1个虚指针的大小。 如果一个类是基类,那么它的析构函数要主动修饰为virtual,否则在多态的使用中不会调用子类的析构函数。 // 删除所有特定值 迭代器不要用小于号<进行比较,应该用不等于号!=进行比较。 5、boost里面的网络库asio是用于网络和底层io编程的跨平台C++库,异步模型。支持同步模式和异步模式。 6、基于事件驱动的编程模型。 7、Ubuntu安装boost和编译使用boost的cpp: 8、c++14才支持lambda形参中使用auto。 9、lambda实际上是编译器给我们生成了一个类,里面重载了()运算符。 auto lambda1 = [](){}; int c = 1; 10、boost绑定回调函数,使用bind的方式: 11、多线程环境下通过使用boost::asio::io_service::strand的wrap函数包裹lambda表达式来同步回调函数。 12、#include <time.h>和#include <ctime>的区别在于ctime里面的东西是包含在std命名空间里面的。 13、传this的智能指针给lambda的方式。 14、方式二会更高效,但是当MyClass的构造函数private的时候,无法使用这个方式,因为make_shared里面会调用MyClass的构造函数。 15、继承enable_shared_from_this的类,在构造函数和析构函数中不能调用shared_from_this函数。 16、<<和write的区别在于<<有很多格式化的操作。 17、类的外部如果要使用类内部的常量的时候,应该使用枚举,不应该使用static常量。 18、如果io_service运行在独立的线程中,可以通过io_service的post函数将主线程要做的一些事情注册到io_service中,然后这些事情将会在某个时刻运行在io_service所在的线程中。 19、getline函数在linux下按ctrl+d结束输入。 20、在头文件定义一个函数时(这个头文件没有class),要把这个函数修饰为inline。否则当有两个cpp包含这个头文件的时候,会生成两份函数实体,链接的时候就会报错。 21、消息协议Protocal Buffer的用法。 编写自己的Protocal.proto,内容如下: 然后用工具protoc将这个Protocal.proto生成对应语言的文件(相当于代码): 然后我们的代码包含Protocal.pb.h即可使用。 在main函数的开始,加上下面这句话,避免版本不兼容: 在main函数的最后,加上下面这句话,避免有工具误判程序内存泄漏: 编译时,要链接相关静态库:-lprotobuf std::string newName = "xxxx"; std::string recvBuffer = "xxxx"; Json解析比Protocal Buffer解析慢一点。 22、rand()函数产生的随机数每次启动都是一样的。 23、安装Linux下的debug调试工具gdb,就相当于程序运行在gdb这个壳里面: g++编译的时候,编译选项加上 -g 把一些debug调试信息在bt打印出来,当用gdb调试的时候更容易定位到错误。 24、stl容器的使用是线程不安全的。 25、多线程环境下通过使用boost::asio::io_service::strand的post函数包裹lambda表达式来异步保护成员变量。用mutex是同步保护成员变量的。 26、使用boost的log库。 #include <boost/log/core.hpp> int main() ?? ?BOOST_LOG_TRIVIAL(trace) << "trace log"; 27、async的用法: 28、ctrl+c相当于给程序发一个中断信号INT 在程序中可以捕获并处理这个信号 static std::function<void()> safeQuit; void signalHander(int sig) int main() 29、cmake的使用。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/22 3:18:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |