技术积累

do

{

if()

break;

if()

break;

}while(false);

  这样做事为了避免大量的嵌套语句


Pimpl机制是Private Implementation的缩写,我们常常听到诸如“不要改动你的公有接口”这样的建议,所以我们一般都会修改私有接口,但是这会导致包含该头文件的所有源文件都要重新编译,这会是个麻烦事儿。Pimpl机制,顾名思义,将实现私有化,力图使得头文件对改变不透明。

机制分析

首先,我们先看看不使用这个机制的一个实现:

  
  
  
  
  1. // MyBase.h  
  2. class MyBase {  
  3. public:  
  4. int foo();  
  5. };  
  6. // MyDerived.h  
  7. #include "MyBase.h"  
  8. class MyDerived : public MyBase {  
  9. public:  
  10. int bar();  
  11. }; 

假设你现在希望在MyBase.h中加入一个新的private和protected成员函数,那么MyDerived和所有包含MyBase.h的源文件都需要重新编译。在一个大工程中,这样的修改可能导致重新编译时间的激增。你可以使用Doxygen或者SciTools看看头文件依赖。

(看来,这种方式主要是用在继承中)



③ 强制for循环一致性

int main(int, char*)

{

for( int i = 0; i < 10; i++);

i = 20;//如果强制一致性,此时i就无效,语句报错,否则正常运行

}


4.一个以前没有想过的问题

        wchar_t wszAr[] = "hello";                              // error
wchar_t wszAr[] = {'h', 'e', 'l', 'l', 'o', '\r', '\n'};// ok

wcslen(wszAr) = 5


5

void test(char *dest, int len, const char* format, ... )
{
va_list args;
va_start( args, format );
_vsnprintf(dest, len, format, args);
va_end(args);
}

void main()

{

char ar[32];
test( ar, 32, "%d,%s", 10, "my");
std::cout << ar << std::endl;

}


6.

void test(char *dest, int len, const char* format, ... )
{
va_list arg_ptr;
va_start( arg_ptr, format );

char* argValue = NULL;

do
{
argValue = va_arg(arg_ptr, char* ); //若...都是char*,则可遍历出各个参数
std::cout << argValue << std::endl;

}while( argValue != NULL );

}


7.

wchar_t value[512] = L"hello";

wcslen(value) = 5;  //长度

sizeof(value) = 1024; //大小

初始化:

memset(value, 0, wcslen(value)*sizeof(wchar_t)) 或

memset(value, 0, sizeof(value));

别搞混了


宽字符与多字符集转换时:

 int len = 0;
  len = ::WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL); 

  char *p = new char[len+2]; //len不包含'\0'结束符,所以要加2
  memset(p, 0, len+2);

  ::WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), p, len, NULL, NULL );

你可能感兴趣的:(技术积累)