摘要:
一 、为什么需要constexpr 有时候需要编译时常量,现在能想到的典型的场景是在确定一个数组长度的声明中。比方说,需要64个bit,也就是8个字节,在32位机器上,需要两个long,在64位机器上需要一个long。那么此时的声明大概可能是long bits[sizeof(long) == 32 阅读全文
摘要:
一、标量类型的析构 下面是一种简化的模型,实际项目中通常对应着缓存区结构,可能会主动调用析构函数,但是这种类型不排除有标量类型的情况。下面的例子中是int类型,但是事实上可能更多的是一种指针类型,那么指针类型主动调用析构会清零吗?tsecer@harry: cat exp.call.dtor.cpp 阅读全文
摘要:
一、问题的由来 在汇编代码中,经常可以看到lea这个指令,它的出现频率比它“应该出现”的频率高得多,因为很多时候,它甚至可以用来做简单的乘法运算。tsecer@harry: cat mult.cpp int foo(int x){ return x * 9;}tsecer@harry: gcc -O 阅读全文
摘要:
一、为什么用这个标题 标题中的Chinglish并不是为了装逼,而是为了更加原汁原味的表达这个问题的出现场景,这个说法来自gcc的提示:gcc-4.4.7\gcc\cp\parser.cstatic boolcp_parser_optional_template_keyword (cp_parser 阅读全文
摘要:
一、operator的重载 这个关键字平时其实几乎不怎么使用,但是偏偏这个关键字和new/delete之类比较孤僻的关键字还经常一起出现,使整个情况看起来更加诡异。之前应该是在看C++ stl库中看到过在类成员中自定义转换函数的,就是希望让一个对象可以转换为bool类型(通常用在if之类的逻辑表达式 阅读全文
摘要:
一、为什么注意到这个问题 之前在使用C风格的cast时候,一个比较烦的地方就是由于转换操作的优先级,导致转换出来的类型需要使用额外的一个括号抱起来,看起来非常臃肿。后来注意到在C++风格的转换符貌似优先级更高,虽然输入量有所增加,但是输入的时候比较流畅,因此看起来也更加流程。tsecer@harry 阅读全文
摘要:
一、为什么遇到这个问题 大致来说,可能是对于日志模块,我们可能需要将用户提供字符串进行格式化之后打印。但是这个用户提供的字符串本身可能千奇百怪,如果其中包含了一些特殊的格式化符号,如果不加特殊处理,则可能会导致一些意外的问题。如果只是"%s"其实还好说,这个如果访问地址非法则直接当场吐核。更坑的是如 阅读全文
摘要:
一、Makefile中的匹配 在Makefile中,可以通过不同的pattern指定不同目标的执行规则,在这个时候就会存在一个哪个target更合适的问题。这里Makefile中引入的是一个stem的概念,从stem中选择最短的。gnu make对该规则的说明A target pattern is 阅读全文
摘要:
零、说明 测试代码基于PhysX_3.4 一、raycast和sweep的特殊性 在场景查询中,raycast/sweep相对于overlap来说有一个重要的特性,就是前两者是有明确方向性的,也就是有一个起点加上一个终点。这个和overlap完全不同,因为overlap是在一个范围内的无差别覆盖。这 阅读全文
摘要:
一、主要的问题 这里主要讨论的是C++中全局/静态局部对象析构函数的执行时机问题。我们知道:全局变量的初始化时在main函数执行之前完成,静态局部变量的初始化是在首次执行到所在函数时执行。但是这些对象的析构函数在什么时候执行,它们在多线程中的表象又是如何?下面首先看下例子:tsecer@harry: 阅读全文