【发布时间】:2015-01-29 17:13:07
【问题描述】:
我有一个类,其中我重载了一些运算符。我的代码是这样的:
myClass << 12 << 14 << 21 << 44
这很好用,首先运行myClass << 12,然后运行myClass << 14。
但如果我尝试做这样的事情,我会遇到问题:
myClass << 12 << 14+18 << 36 << 14 << 47
运算符+ 也重载了,问题是14+18 在myClass << 12 之前运行。我真的需要先执行myClass << 12,然后再执行14+18。我怎样才能做到这一点?
编辑:
我想将一些数字和数字数组放入流中。数字部分解决了。至于数字数组,我正在做这样的事情:
myClass << 12 << myClass(array,10) << 21 << 19
其中运算符() 被重载,array 是数字数组,10 是数组的长度。我这样做是因为我需要某种方法来保持数组的长度,但问题是 myClass(array,10) 在 myClass << 12 之前执行。所以,在这种情况下,我想首先将12 放入流中,然后放入我的数字数组,我需要知道它的长度。
而且,我不想使用这个解决方案:
myClass << 12
myClass << myClass(array,10)
因为我想将我的代码用作库,所以我的意图是最终用户可以灵活地在一行中编写所有内容。
【问题讨论】:
-
你不能为两个整数重载
operator+。您的真实代码是什么样的? -
是的,很抱歉,我没有像那样使用 operator+。这只是一个例子。
-
您是否尝试过使用括号强制评估顺序?如
myClass << 12 << (14 + 18) << 36 << 14 << 47。这是输出到标准流时建议的编码风格。 -
为什么先执行
myClass(array,10)会出问题?那个构造函数做了什么? -
@Mooing Duck 这不是构造函数(我一开始也认为它也是,直到我重读了大约 3-4 次问题),它是
operator()并且可能不是返回表示数组的字符串它立即写入流。
标签: c++ operators overloading operator-precedence