gpt4 book ai didi

c++ - 需要某种运算符.. c++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:38 26 4
gpt4 key购买 nike

我想在队列中存储一个字符串序列。如果我使用成员函数 push()

这看起来很简单
queue test;
string s0("s0"), s1("s1");

test.push(s0);
test.push(s1);

我正在考虑以隐式方式将字符串添加到队列中。这意味着,如果我键入以下字符串序列,例如operator >> 应该将字符串值推送到队列中。

queue test;
string s0("s0"), s1("s1");

s0 >> s1 >> s2 >> s3 ;

有什么办法吗?

最佳答案

虽然 C++ 不允许您这样做,但它允许您做一些非常相似的事情:test << s0 << s1;但是,不要这样做!

如果我看到 test.push(s0) , 我很清楚它的作用,甚至不用看 test 的类型.如果我看到 test << s0 << s1; ,我想 test是写入的流。


这是我的在重载运算符时您应该遵守的三个基本规则:

  1. 尽管有看似明显的相反证据,但令人惊讶的是,适合运算符重载的情况很少。因此,重载运算符的首要规则,其核心是:不要这样做。这可能看起来很奇怪,但实际上很难理解背后的语义运营商的应用,除非该运营商在应用领域的使用是众所周知且无可争议的。与普遍的看法相反,情况几乎从未如此。 只要运算符的含义不明显且无可争议,就不应该重载它。相反,提供一个名称选择得当的函数。
  2. C++ 对重载运算符的语义几乎没有限制。你的编译器会很乐意接受实现二进制 + 的代码。运算符改变其右操作数。但是,此类运算符的用户永远不会怀疑表达式 a + b。更改 b 的值.这就是为什么运算符重载的第二条规则说:始终坚持运算符的众所周知的语义。(反过来,假定语义是无可争议的;请参阅以前的规则。)
  3. 最后,永远记住运算符彼此相关并与其他操作相关。如果你的类型支持 a + b , 用户希望能够调用 a += b , 也。如果它支持前缀递增++a,他们会期望 a++ 也能工作。如果他们可以检查是否a < b ,他们肯定希望也能够检查是否 a > b .如果他们可以复制构造您的类型,他们希望赋值也能正常工作。所以运算符重载的第三条规则提醒你:Always provide all out of a set of related operations.

与所有此类规则一样,确实存在异常(exception)情况。有时人们偏离了它们,结果并不是糟糕的代码,但这种偏离很少见。至少,我看到的 100 个这样的偏差中有 99 个是不合理的。然而,1000 分中有 999 分也可能是这样。所以你最好遵守这些规则。

以防万一我不够清楚:对于您问题中的代码,偏离这些规则是非常糟糕的。

关于c++ - 需要某种运算符.. c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626483/

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