common
lexical_cast 提供string2int, int2string,
#define(...)
可变宏:…和__VA_ARGS__
宏定义中参数列表的最后一个参数为省略号(三个英文句号,省略号只能代替最后参数)。这样,预定义宏__VA_ARGS__就可以被用在替换部分中,以表明省略号代码什么。例如:
1: #define PR(...) printf(__VA_ARGS__)
2: #define PX(x,...) printf("Message " #x ": " __VA_ARGS__)
optional, any, variant
variant<int, double, string, int> cv
cv = 10;
std::optional<std::string> a
if(a)...
如果想在进程间依靠动态库来共享全局变量恐怕是不太可能的事情,因为不同进程访问动态库时,是写时拷贝,即如果另外一个进程试图去修改动态库中的全局变量时,系统就会把这个全局变量拷贝一份单独给这个进程,而这个修改操作并不会影响到其他进程中变量的值。
因为函数类型可以隐式地转换成函数指针类型(这种隐式转换叫退化,类似的行为还有数组类型退化成指针类型),并且函数调用操作可以同时应用在函数和函数指针类型上
实际上,C/C++语法上函数是没办法直接调用用的,能直接调用的是函数指针.调用函数会触发一个隐藏的函数->函数指针的转换.函数指针解引用后调用,结果还会重新获取函数指针再调用.函数给函数指针赋值也一样,会自动转换成函数指针.也就是加不加&其实都一样,一个隐式一个显式.
在模板里长度为N的数组是数组,指针是指针.同样地,模板里函数类型也区分函数类型还是函数指针,
模板函数类型不能调用,函数指针或者引用类型才可调用,这个是很多初学者甚至用了C++好几年的“有经验”的人都搞不懂的地方.
;Add()函数
int Add(int a,int b)
{
;保存现场…
009813DB push edi
009813DC lea edi,[ebp-0CCh]
009813E2 mov ecx,33h
009813E7 mov eax,0CCCCCCCCh
009813EC rep stos dword ptr es:[edi]
;执行函数体代码,计算两个数的和
int nRes = a + b;
009813EE mov eax,dword ptr [a]
009813F1 add eax,dword ptr [b]
;将结果保存到nRes
int nRes = a + b;
009813F4 mov dword ptr [nRes],eax
;将结果数据nRes移动(MOV)到eax寄存器,函数返回
return nRes;
009813F7 mov eax,dword ptr [nRes]
}