gpt4 book ai didi

c++ - 定义一个像整数无穷大一样的对象

转载 作者:可可西里 更新时间:2023-11-01 15:14:35 24 4
gpt4 key购买 nike

我创建了一个对象,它的行为有点像长整型的无穷大。具体来说:

#ifndef MU_INF_H
#define MU_INF_H
#include "mu.h"
namespace mu {
class Inf {
public:
bool operator> ( long int i ) { return true; }
bool operator> ( Inf i ) { return false; }
... lots of other boolean operators ...
Inf& operator+ ( long int i ) { return *this; }
Inf& operator+ ( Inf i ) { return *this; }
... lots of other integer operators ...
}; // class Inf
} // namespace mu
#endif

这一切都很好,允许我运行以下形式的单元测试:

  mu::Inf inf;
long int n = -1;
long int z = 0;
long int p = 1;

ASSERT((inf + inf) == inf);
ASSERT((inf + n) == inf);
ASSERT((inf + z) == inf);
ASSERT((inf + p) == inf);

ASSERT((inf > inf) == false);
ASSERT((inf > n) == true);
ASSERT((inf > z) == true);
ASSERT((inf > p) == true);

冒着无法分配复选标记的风险,我有三个问题:

  • C++ 是否已经提供了类似的东西,和/或是否有比我在这里做的明显更好的方法?
  • 我想让 Inf 的一个实例在我的整个系统中可用。我不能将它声明为 static const 因为它不是一个“简单”对象。什么是正确的方法:全局?单例模式?
  • 有没有办法处理 long int 先出现的对称运算符,即 ASSERT((1 + inf) == inf)? (如果没有我也不会太难过。)

最佳答案

  1. 据我所知,虽然在我看来您在重载中以困惑的方式使用了对 Inf 和实际对象的引用。

    通常,除了复合赋值运算符(通过引用返回)之外,您通过值或 const 引用获取参数并通过值返回所有运算符以获得预期的语义。当然,由于您的 Inf 对象没有状态,所以这一切只在一定程度上有意义。

  2. 我会使用 const 全局变量来避免单例中涉及的括号和潜在的函数调用。这是否也是 static 应该几乎没有区别(您没有以任何方式访问 this)。

  3. 您必须将运算符编写为一个自由函数:

     inline Inf operator+(long int i, const Inf&) { return *this;} 

关于c++ - 定义一个像整数无穷大一样的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23465236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com