12个回答

你认为 C++ 最不应该存在的特性是什么?

举报民科专业户
89个点赞 👍

我认为 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 属地北京
快乐代码
自由评论 (0)
分享
Copyright © 2022 GreatFire.org