C++中,类成员的声明与定义有时会遇到默认参数,此时如果在声明与定义中都加上了默认参数,编译器编译时便会报错。如下:
//.h中
class Ssock{
public:
Ssock();
int Cbind(ULONG Csockipaddr =inet_addr("127.0.0.1"), USHORT Csockport=htons(1234));
}
//.cpp中
int Ssock::Cbind(ULONG Csockipaddr =inet_addr("127.0.0.1"), USHORT Csockport=htons(1234)){
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = Csockipaddr;
sockAddr.sin_port = Csockport;
bind(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
return 0;
}
这种情况下编译编译器会报错。
在此感谢@大牌忧愁呼噜妹 与 @Terry_Charles 的肩膀,但是两位没有提到问题的本质——即默认参数只能在声明处,不能在定义处——因为我后来分别将声明处与定义处的默认参数去掉,发现前者可以无参使用,后者只能带参数使用。
结论:默认参数在声明处声明,定义处不再出现。