细节总结
1、对函数来说:const char*型的参数和"psTag::ErrorInfo"字符串常量并无区别;即"psTag::ErrorInfo"型的实参,在调用函数端可以使用const char*型;
int 型的实参,在调用函数端可以使用int& 引用型;但注意使用int常量"2"不行对一个const char*型的变量p来说,printf("%s"n", p)可将其内容全部输出,若使用printf("%c", *p)可输出其首字母。
2、可变参数列表:类似 int printf(const char* format,…);函数的参数列表,其并未规定其具体的参数个数,称为可变参数列表。在实现时通过va_start、va_arg循环,可以一个一个地获得后续的参数。
3、在C++中,使用#include <iostream> using namespace std;或#include <iostream>加上std:cout;可使用输入输出流(cout & cin)。
4、warning C4530:C++异常,加上编译选项 /GX或者是/EHsc。
warning C4996:VS2005不兼容之前版本函数,加#pragma warning(disable:4996)。
5、初始化成员列表:在定义类时我们可以定义类的构造函数如下:
class HA_CommandHandler : public ACE_Task_Base
{
public:
HA_CommandHandler(HA_Device_Repository& rep,
ACE_Condition<ACE_Thread_Mutex>& wait,
ACE_Thread_Mutex& rep_mutex)
: rep_(rep),waitCond_(wait),mutex_(rep_mutex)
{ }
}
从而当我们定义该类的对象时,我们可以在定义对象时给以参数,从而实现构造功能。如:
HA_CommandHandler handler1(rep, wait, rep_mutex);
该rep等参数为主函数中已经定义的变量,而rep_为类中定义的HA_Device_Repository&型变量,从而实现了对类中变量的赋值。
也可采用的方式是:
HA_Device_Repository() : owner_(0)
{ }
即定义时HA_Device_Repository rep;对象rep的成员变量owner_默认为0。
在以下三种情况下使用初始化列表:需要初始化的成员是类对象、const型(由于const型不能被赋值)、引用(引用类型必须在定义时赋值)
6、int main(int argc, char *argv[]),用于接收外部参数,其中argc是指变量的个数,argv是一个char *的数组,其中存放变量的内容。
在默认的情况下,argc = 1;argv中存放的字符串是生成的exe文件的路径,如d://temp/test.exe.
使用if (argc > 1)判断main函数的输入,当派生子进程时,argc = 2。
7、ACE_DEBUG的用法:
输出单个语句: ACE_DEBUG((LM_DEBUG, "%s", "Hello!"n")); ///类似printf
输出变量加语句: ACE_DEBUG((LM_DEBUG, "aPtr is%x"n", aPtr));
需要输出多个参数: ACE_DEBUG((LM_DEBUG, "aPtr is%x"nbPtr is%x"n", aPtr, bPtr));
输出特殊的附加项: ACE_DEBUG((LM_DEBUG, INFO_FORMAT, "Debug Error!"));
#define INFO_FORMAT "%D@%M@%t@%l@%s"n"
输出时间@级别@线程号@行号@后续字符串
浙公网安备 33010602011771号