10年前就总是口头上挂着说要去弄linux下的gcc编译,不幸这10年接触的项目都跟linux无缘,今天终于有机会折腾一下gcc……

最大的感觉,gcc对语法的检查真是严格!vc各种放过我的地方,gcc真是一个个地得理不饶人。

比如下面的菱形继承,vc就放过我了,gcc死也不放,绕也绕不过去,真气人:

class A
{};
class B : public A
{};
class C : public A
{};class Foo: public A, public B, public C
{};int main()
{Foo* f = new Foo();B *ptrb = (B*)(Foo*)f;C *ptrc = (C*)(Foo*)f;A *ptr = (A*)(Foo*)f;     // errorcout << "Hello world!" << endl;return 0;
}

然后的最大的感觉,就是gcc的template基本上都是会直接展开一下的,不像vc,不用是绝对不会展开的。

我这么写了一个检查reflection的类,如果用户试图在没有reflection时就想用反射信息,会毫不客气编译期报错:

template<typename T>
class   TTypeToTypeDecl
{
public:typedef  NullType    type;static TypeBase*   getTypeDecl(){static_assert(false, "wrong type declaration!");return NULL;}
};

vc是实例化时才展开这个template,所以使用时出错这里才会报编译错误。

而gcc是直接展开,所以这么写直接就over了,只要包含这个头文件就直接编译错误。

好在这玩意儿比较好绕:

template<typename T>
class   TTypeToTypeDecl
{
public:typedef  NullType    type;static TypeBase*   getTypeDecl(){static_assert(std::is_same<NullType, TTypeToTypeDecl<T>::type>::value, "wrong type declaration!");return NULL;}
};

此外的还有就是我很多template是按照假设写的,template A假设传入的T一定具有某些方法,严格的gcc毫不客气各种报错……

好在unix系强大的定制性的习惯:果断开一个命令行指令就把Error转成Warning了。

吐槽这么多其实还是很感谢GCC的,严格一点其实是件好事,可以导致更少地去犯错误。

这玩意,比预想中的复杂,但好像又没有预想中那么困难。两个小时就把自己的reflection库整合进去了。

继续各种折腾吧……

没那么简单,没那么困难相关推荐

  1. 在疫情震中,哥大AI博士回顾五年CV研究生涯:没那么简单,没那么难...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Showthem@知乎(已授权) 编辑丨AI科技评论 「开始写这边总结的时候是三月,纽约成了疫情 ...

  2. 【转载 来自sdnlab】 开放网络没那么简单

    链接:开放网络没那么简单 本文是云杉网络工程师张攀对当前开源网络技术现状的一些思考和探索. 开放网元.释放数据的价值 从2012年开始至今,网络行业明显是O字辈的天下.所有我接触过了解过的组织和项目, ...

  3. Redis 分布式锁没这么简单,网上大多数都有 bug

    Redis 分布式锁这个话题似乎烂大街了,不管你是面试还是工作,随处可见,「码哥」为啥还写? 因为看过很多文章没有将分布式锁的各种问题讲明白,所以准备写一篇,也当做自己的学习总结. 在进入正文之前,我 ...

  4. 的union_C语言“隐秘的角落”——union没那么简单

    写在前面:此文将摘录C语言中容易被忽视的一些知识,并且加以思考为什么要那么做. 它可以存在的道理是:所有语言或多或少都有共同点,举一反三或许可以得到的更多. 我将以tip 1,2,3 当做标识持续更新 ...

  5. 《魂斗罗:归来》手游子弹中没中,没你想得那么简单!

    无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作. 除了IP,剧情,对工程师而言,<魂斗罗:归来>更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没 ...

  6. “疫”外爆发:没那么简单的视频会议

    Photo by Fox from Pexels 2月10日,春节假期正式结束的第一天,企业员工线上复工的热情仍在高涨,视频会议平台迎来又一波紧急扩容.疫情的峰值还没有到来,"几十年一遇的风 ...

  7. 安全开发Java:日志注入,并没那么简单

    本文分享自华为云社区<Java云服务开发安全问题解析--日志注入,并没那么简单>,原文作者:breakDraw. 案例故事 某个新系统上线了,小A在其中开发了个简单的登录模块,会在日志里记 ...

  8. html水滴掉下来越来越来越淡代码,水滴落到水面就消失了?没那么简单!看水滴如何翩翩起舞!...

    原标题:水滴落到水面就消失了?没那么简单!看水滴如何翩翩起舞! 各位大朋友及小朋友们,下午好!欢迎来到科学小实验之科学有意思栏目,培养孩子正确的好奇心! 当一滴水滴落到水面,会发生什么现象呢?看似一个 ...

  9. 什么是车联网?导航?听歌?智能语音识别?事实没这么简单!

    什么是车联网?导航?听歌?智能语音识别?事实没这么简单! 至今还记得刚刚学驾照时,第一次摸车的那种兴奋与紧张并存的复杂心理.而那时候学车用的教练车还是极为简陋的"老捷达",完全靠机 ...

  10. 《没那么简单》-黄小琥

    因为萧煌奇的那首<你是我的眼>而喜欢上他但是我至今不明白为什么我每次看到他都是戴着墨镜咧?他看起来不像伍佰喜欢耍酷的人啊,莫非他眼睛真的有问题? 黄小琥,虽然一直翻唱别人的歌,但都有她自己 ...

最新文章

  1. Applet相关知识
  2. java使用重绘实现拖动_原生JS使用Canvas实现拖拽式绘图功能
  3. Socket 实现聊天功能
  4. 注解Annotation的IoC:从@Autowired到@Component
  5. Dubbo消费者代理的调用
  6. Linux内核深入理解中断和异常(7):中断下半部:Softirq, Tasklets and Workqueues
  7. java生成cmd jar包_Java程序运行机制及cmd编译运行探究(二) cmd编译运行Java程序并打成jar包...
  8. VirtualBox创建虚拟电脑、执行Genymotion模拟器报错
  9. ubuntu 的 kitti2bag安装与测试
  10. Spark入门基本操作
  11. Pr视频剪辑基础技巧学习
  12. vim 设置文件类型_如何手动设置Vim的文件类型?
  13. 基于华为云服务的人脸识别功能实现
  14. Jquery之瀑布流
  15. 01-Partial Dependence Plot(PDP)部分依赖图
  16. RK系列开发板音频驱动适配指南(一)
  17. Android 调起系统相机拍照
  18. 深入理解计算机系统-bomblab详解
  19. [构造]Repetitions Decoding Codeforces1642D
  20. spring 中的JMS是什么?

热门文章

  1. Ant简介及视频教程
  2. 全新电影社交观影,满足影迷移动巨幕与移动3D体验
  3. 详解Unity中的粒子系统Particle System (九)
  4. 服务器打不开微信怎么办,手机wifi只能用微信,打不开网页怎么处理?
  5. 获取IPhone相册中图片的方法(ASSets)
  6. mysql生成序列_mysql 自动生成编号函数
  7. C++在WINdow桌面绘制文字图形
  8. 4月刊佳文推荐:开发者的眼界
  9. python批量裁剪图像
  10. 绘制超漂亮的基因差异表达火山图