带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(3)

简介: 带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(3)

带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(2)https://developer.aliyun.com/article/1340928?groupCode=taobaotech


关于宽字符的问题

 

你需要知道的:在Windows中,wchar_t占两个字节,Linux中占四个字节,这里有几个问题

  1. 导致体积占用大小不同。
  2. 程序移植带来困难
  3. 隐式转换结果不符合预期

 

 

 

跨端开发应避免wchar的普遍使用,以避免宽窄字符转换带来的开销以及额外的问题,应普遍使用utf-8作为主要的编码,这也是主流的思路。即时是特殊场景也可以用使用utf16,避免使用wchar。简而言之,除非必要,否则请不要使用。

 

应该限定字符串数组在保存为字节流时,使用编码为uft-8

 

请在字符串前加u8"",特别是包含中文的部分,习惯在vs下开发的同学也需要额外注意,vs默认的文件编码是gb2312, 这会有概率导致字符串可能会不小心被保存为gbk编码格式。

 

同时u8仅限在字符串前使用,在字符前使用是没有任何意义的,即时在ms上会编译通过,在clang下会提示

1 int pos = targetID.rfind(u8'_'); // error: use of undeclared identifier 'u8' ...

 

 

避免连续两个尖括号的定义

 

例如

std::vector<std::vector<int>> vec

 

 

在Windows下这么写没问题,那么在某些平台下可能编译不过,提供两种方式:

  1. 可以在连续两个尖括号符号之间留一个空格,即
std::vector<std::vector<int> > vec;
  1. 也可以typedef

 

C++11标准里已经解决了此问题,如果确认编译器版本已经支持了这个特性(参考:https://isocpp.org/wiki/- faq/cpp11-language-misc

In C++98 this is a syntax error because there is no space between the two >s. C++11 recognizes such two >s as a correct termination of two template argument lists.),此条可以忽略,但是通常两个>>的情况也意味着嵌套使用,typedef后通常阅读性也会得到提高。

 

 

对于平台差异的代码部分处理

跨端开发难免出现平台差异性代码,对于这部分的处理,对于简短的部分建议使用if def的方式区别,对于功能性的、代码较多的建议使用分文件开发,xxxx_win.cpp, xxxx_mac.cpp, xxxx_linux.cpp, 可以参考chromium的代码在大量使用这种方式。

 

同时对于差异性代码部分,应保持除非必要否则不定义的原则,因尽可能保持跨端的代码处理方式,过多的平台差异性将势必导致维护性变的很差。

 

应避免使用非标准的编译器支持的关键词

 

  1. c++标准关键词参考 :

https://baike.baidu.com/item/C%2B%2B%E5%85%B3%E9%94%AE%E5%AD%97/5773813

  1. 双底杠开头的关键词多为Microsoft定义的c++关键词,跨端开发中应尽量避免,诸如:__super, __wchar_t,

__stdcall__stdcall等等,详细的请参考:https://docs.microsoft.com/zh-cn/cpp/cpp/keywords-cp- p?view=msvc-170#microsoft-specific-c-keywords

带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(4)https://developer.aliyun.com/article/1340926?groupCode=taobaotech

相关文章
|
Linux
一个进程最多可以创建多少个线程基本分析
一个进程最多可以创建多少个线程基本分析
928 1
|
11月前
|
设计模式 Prometheus 监控
并发设计模式实战系列(20):扇出/扇入模式(Fan-Out/Fan-In)(完结篇)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第二十章,废话不多说直接开始~
347 0
|
网络协议 算法 Linux
深度解密 TCP 三次握手与四次挥手
深度解密 TCP 三次握手与四次挥手
653 9
|
安全 调度 C++
互斥锁 vs 自旋锁:底层机制详细解析
互斥锁 vs 自旋锁:底层机制详细解析
586 1
|
存储 NoSQL Linux
定时器的实现方案:红黑树和多级时间轮
定时器的实现方案:红黑树和多级时间轮
|
存储 机器学习/深度学习 缓存
万字详解C++内存池:提高内存分配效率的利器(上)
万字详解C++内存池:提高内存分配效率的利器
万字详解C++内存池:提高内存分配效率的利器(上)
|
编译器 C++
【C++11保姆级教程】delete和default关键字
【C++11保姆级教程】delete和default关键字
887 0
|
安全 算法 编译器
【C++ 泛型编程 进阶篇】C++ 元模板推导函数调用的结果类型 std::result_of/std::invoke_result全面教程
【C++ 泛型编程 进阶篇】C++ 元模板推导函数调用的结果类型 std::result_of/std::invoke_result全面教程
1300 0
|
应用服务中间件 nginx
Nginx源码阅读:nginx_shmtx共享互斥锁(进程锁)
Nginx源码阅读:nginx_shmtx共享互斥锁(进程锁)
338 0
|
缓存 网络协议 算法
窗口到底有多滑动?揭秘TCP/IP滑动窗口的工作原理
当涉及网络性能优化和数据传输可靠性时,TCP/IP滑动窗口是一个关键的技术。本文的摘要将深入揭示TCP/IP滑动窗口的工作原理,探讨其在确保数据准确性和实现高效通信方面的重要性。通过对滑动窗口大小、流控制和数据包确认机制的解析,我们将揭示如何通过优化窗口大小和流控制参数来提升网络性能。此外,我们还将介绍滑动窗口在解决网络拥塞和丢包问题方面的作用,以及如何通过精准的窗口调整实现零丢失、百分之百到达的数据传输。通过理解滑动窗口的工作原理,读者将能够更好地理解网络通信的内部机制,并为优化其应用程序的性能提供有价值的见解。
805 0
窗口到底有多滑动?揭秘TCP/IP滑动窗口的工作原理

热门文章

最新文章