我认为 C++ 有很多特性把默认和非默认的情况搞反了。
比如 explicit 关键字:
struct A
{
A(int); // Bad
};
类 A 的构造函数接受一个 int 型参数,表示 A 和 int 可以隐式转换,如果 A 是个大整数类还可以理解,否则就有点莫名奇妙了。
只有在构造函数前加上 explicit 关键字才能限制这种隐式转换:
struct A
{
explicit A(int); // Good
};
大多数情况下都应该写 explicit,不写的情况是少数,所以这个关键字我认为是搞反了,应该是 implicit 才好。默认情况下不应开放隐式转换,只有用户有意开放再开放。
编辑于 2023-07-28 13:21・IP 属地北京