大家好,欢迎来到IT知识分享网。
【网络通信 — WebRTC】WebRTC 源码分析 — RTC_CHECK
【1】RTC_DCHECK(1 != 1) << “hello world ” << 100 << 3.14;的执行过程
RTC_DCHECK(1 != 1) << "hello world " << 100 << 3.14;的执行过程 宏展开结果 while (!(1 != 1)) FatalLogCall<false>("main.cc", 7, "1 != 1") & LogStreamer<>() << "hello world " << 100 << 3.14; 注,根据运算符的优先级,<< 运算符比 & 运算符优先级高,所以先算 << 运算符
<< 运算符的运算过程
- 1. 先计算 LogStreamer<>() << “hello world “,LogStreamer<>() 生成临时对象,临时对象会调用 operator<<() 函数,operator<<() 函数会把 “hello world” 和临时对象作为参数,生成 LogStreamer<T, Ts…> 对象,该对象存储着 “hello world” 和临时对象
- 2. 上一步生成的 LogStreamer<T, Ts…> 对象会继续调用 operator<<() 函数,同时把自己和 100 传入,生成一个新的 LogStreamer<T, Ts…> 对象,从而递归下去,直到所有的 << 运算符处理完毕
添加图片注释,不超过 140 字(可选)
& 运算符的运算过程
- 1. 上一步最后会返回 LogStreamer<T, Ts…> 对象,组成了新的表达式,FatalLogCall<false>(“main.cc”, 7, “1 != 1”) & LogStreamer<T, Ts…>
- FatalLogCall<false>(“main.cc”, 7, “1 != 1”) 会生成临时对象,临时对象会继续调用 operator&() 函数
- 2. 在 operator&() 函数中会使用 LogStreamer<T, Ts…> 对象调用 Call() 函数,会产生递归调用,每次调用都会把本类保存的日志数据往下层传递
- 3. 递归到最后,LogStreamer<>() 生成临时对象会调用 FatalLog() 函数,将所有日志数据打印出来
添加图片注释,不超过 140 字(可选)
整理了一些webRTC的视频和文档资料需要的伙伴私信【1】进群领取,包含一些必备的webRTC技术点
另外分享个宝藏免费视频网址,点进免费报名就可以直接学习的视频网址!我的宝藏链接:【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频教程-腾讯课堂
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/88928.html