【问题标题】:Can we overload operators for built-in types like int or float?我们可以为 int 或 float 等内置类型重载运算符吗?
【发布时间】:2013-07-30 08:08:52
【问题描述】:

我们可以在 c++ 中声明这样的函数吗:

int operator + (int , int);

您的回答将不胜感激!

谢谢

【问题讨论】:

  • 您不能为内置类型重载运算符。
  • 您的问题正文似乎与标题无关。你在问什么?
  • 我认为参数必须是对象,如果允许重载 int 类型,那么整体算术运算将是一个混乱
  • 但是,您可以定义expression templates 以达到相同的效果,请参见例如我在这里的例子:Can we inherit from Qt containers?
  • “命名操作符”是 another advanced idiom,您可以使用它来“关闭”:x = a <plus> b 可能是“重载”

标签: c++ overloading


【解决方案1】:

您不能重新定义内置运算符。运算符重载 旨在让您扩展语言,而不是改变 它。重载运算符的至少一个参数 必须是用户定义的类型(类或枚举类型)或引用 到用户定义的类型。

【讨论】:

  • 这是对 C++ 精神的限制,永远不会阻止程序员在脚下开枪?
【解决方案2】:

是的:您可以将整数和浮点数传递给重载函数

否:当内置类型位于表达式的两侧时,您不能重载/覆盖内置类型的运算符。

【讨论】:

    【解决方案3】:

    不,我们不能重载整数或浮点类型,因为重载意味着改变现有运算符的工作方式或使它们与对象一起工作 int 是单个成员而不是对象。

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多