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] 
}

 

posted on 2017-01-09 12:41  abelian  阅读(171)  评论(0)    收藏  举报