用C ++重载'space'运算符?

时间:2011-02-28 18:33:14

标签: c++ operator-overloading c++11

我在C ++方面有一点经验。我知道如何重载加号和什么不加号,但想重载空间操作符。

例如:

MyObject obj();

result = obj - foo; // This would be treated as a normal '-' operation.

result = obj-foo; // This would invoke code which throws an assert at runtime

这将允许我执行我试图为我的团队制定的某些风格指南。

谢谢!

7 个答案:

答案 0 :(得分:9)

C ++中没有空格操作符。在大多数情况下,空白并不重要,与

之间的解析观点没有区别
a-b

a -      b

我很高兴。

注意:在我看来,有一些极端情况(嵌套模板会让人想到)它实际上很重要,但这更像是一种语法工件,而不是作为“操作员”活跃的空白的指示。

答案 1 :(得分:6)

Bjarne Stroustrup 曾一度建议allowing overloading of whitespaces [PDF]。但看到这篇文章发表于4月1日 st ,他可能不是100%认真......

这篇文章值得一读。


修改:注意到这已经发布在评论中了......好吧。

答案 2 :(得分:3)

没有空格操作符这样的项目。一般来说,在C ++中,空格是无关紧要的,并且不会导致程序中的功能差异,因此没有什么可以超载。

您正在寻找的是C ++的静态分析工具。类似于StyleCop for C ++的东西。不幸的是,我在这个领域没有很多经验,不能推荐一个特定的程序。可能这个线程上的其他人也可以。

答案 3 :(得分:3)

抱歉,不可能。

而是查看代码格式化程序 - 每个流行的IDE都有一些(例如eclipse的checkstyle),或者您可以在版本控制系统服务器中设置预提交挂钩,检查格式化之前和之后的代码是否为相同,如果没有,它返回错误而不是允许提交代码。

答案 4 :(得分:2)

这是不可能的。空间不是运营商。如果要强制执行样式,请使用静态代码分析工具并与团队成员交谈。尝试cpplint或类似的东西。

答案 5 :(得分:2)

如果要强制执行样式指南,请获取可识别样式违规的工具或应用程序。可以做到这一点的工具是Klocwork。那里可能有更小更简单的工具。

最坏的情况,写自己的。

答案 6 :(得分:-1)

我建议看一下Guy Steele的新HPC语言:Fortress。它允许重载并置运算符。还有一篇关于这方面的博客文章here。它不会帮助你格式化,但它相当时髦。 (Haskell和ML也使用并置来应用函数)。