来自http://www.stroustrup.com/bs_faq.html#improve-my-C++-programs
Q: What's the best way to improve my C++ programs?
A: I couldn't say. That depends on how you use it. Most people underestimate abstract classes and templates. Conversely, most people seriously overuse casts and macros.
我以前见过关于宏的观点,但是当“大多数人”可以做其他事情时,他们会用强制类型转换做什么呢?我正在考虑指针转换。
最佳答案
what do "most people" do with casts when they could be doing something else?
您对指针强制转换的猜测听起来是正确的。
考虑这段代码:
class some_base { /* ... */ };
class some_implementation: public some_base
{ void do_impl_stuff() { /* ... */ } }; // do_impl code is in specialization
错误的客户端代码:
void do_stuff(some_base* base)
{
if(some_implementation* p = dynamic_cast<some_implementation*>(base)) {
p->do_impl_stuff();
}
}
更好的选择:
class some_base
{
public:
virtual void do_impl_stuff() = 0;
virtual ~some_base() = default;
};
class some_implementation: public some_base
{ virtual void do_impl_stuff() override { /* ... */ } };
void do_stuff(some_base* base)
{
base->do_impl_stuff();
}
第一个示例“滥用”动态转换。第二,是“做点别的事”
编辑:Xephon 提出的观点也是有效的。
关于宏的过度使用,您在 C++ 中使用宏编写的大多数代码都可以(并且一般来说应该)使用模板化代码编写。
举个例子,看看 C #define min
/#define max
与 C++ std::min
和 std::max
(C 版本有很多问题,一点都不好笑)。
关于c++ - "most people seriously overuse casts"怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20428538/