![]() |
1
1
看来你不是以面向对象的方式来考虑这个问题。我不得不同意你不想这么做的建议。 您要做的是将向量的概念抽象到一个类中,并实现可能要与向量一起使用的常用方法。实际上,您可能希望考虑将上面的类示例实现为“Point”类,然后让“Vector”类聚合两个Point类。 使用您的示例,如果您的类用于两个不同的目的,那么它将不会得到很好的定义。假设你想在某个类上建立一个方法来绘制矢量2。您必须知道vector2的哪些实例表示起点,哪些实例表示宽度/高度。您可能还需要第三个表示来表示方向。更简单的方法是根据getStartPoint、getEndPoint和任何其他方法来实现向量,这些方法将执行适合于向量的计算。然后消费者不需要知道vector2类的内部工作,他们只需要调用方法来获取所需的信息。 |
![]() |
2
4
那么编译器可能有很好的理由这样做。 我认为这是一个没有问题的问题,只要让具有替代名称的函数调用“real”函数,编译器就很可能将其内联。 编辑: 如果这不能说服你,你可以用 __forceinline 在visual studio中。 Here 是在GCC中强制内联的方法。 编辑2:
|
![]() |
3
1
您引用的链接也是AFAIK,它也不是C特性,而是特定于特定编译器的特性。 C++提供了这样一种机制:它恰好是内联函数!担心编译器没有优化掉可内联函数中的冗余调用绝对是过早的优化。内联,然后衡量你是否担心性能。
如果您绝对坚持要消除冗余调用的最小机会,那么您可以使用预处理器
|
![]() |
4
1
使用C++ 11可以做到:
|
![]() |
5
0
你可以使用预处理器
|
![]() |
6
-3
因此,您希望在同一对象上有两个函数,它们返回的数据与同一数据类型完全相同。 别那么做。 为同一个数据提供多条路径是一个听起来可能对任何人使用你的对象都很方便的事情——直到你考虑它。接下来的六个月,有人在这两个函数中的一个中发现了一个bug,而你修复了那个函数,但没有修复另一个,所以bug仍然存在。或者为你的对象编写客户端的程序员有点发疯,想知道getLength()和getSpan()之间有什么区别。 我要做的一件事就是实现一个需要重复现有成员函数的接口。在这种情况下,接口的函数将是虚拟的,因此内联的概念将消失在窗口之外。 |
![]() |
flix · 具有多个命令的Doxygen别名 7 年前 |
![]() |
chu8 · MySQL是否按照写入的顺序执行查询? 7 年前 |
![]() |
durilka · 在TypeScript中扩展联合类型别名? 7 年前 |
![]() |
showkey · 如何在alias中设置函数参数? 8 年前 |
![]() |
Shubham Goyal · SQL重复列名 8 年前 |