繁体   English   中英

C 中的运算符重载

[英]Operator overloading in C

我试图重载一些运算符:

/* Typedef is required for operators */
typedef int Colour;

/* Operators */
Colour operator+(Colour colour1, Colour colour2);
Colour operator-(Colour colour1, Colour colour2);
Colour operator*(Colour colour1, Colour colour2);
Colour operator/(Colour colour1, Colour colour2);

每次尝试重载时,我都会收到此错误:

expected '=', ',', ';', 'asm' or '__attribute__' before '+' token

我找不到关于运算符重载的任何好的文档。 谷歌搜索结果是使用类的 C++ 教程。 在 C 中没有类。 谁能帮我? 谢谢。

C 不支持运算符重载(超出它内置在语言中的内容)。

C 中没有运算符重载。

您需要一台时光机带您回到 1985 年,以便您可以使用CFront程序。 似乎“C”用于支持运算符重载; 到足够复杂它仍然可以。 请参阅Stanley B. Lippman 的Inside the C++ Object Model 天哪,C++ 是 C! 这样的事情仍然存在。

这个答案证实了其他答案。 'C' 本身不直接支持重载。 然而,重要的一点是程序员可以编写理解代码的代码。 您需要一个转换源的工具来实现这一点。 在这种情况下,此类工具已经存在。

Edward D. Willink 于 2001 年发表的一篇论文, C++ 元编译,提供了有趣的设计功能示例,其中扩展语言很有用。 *nix shell 脚本和make规则的组合通常允许这种转换。 其他示例是Qt MOC、工具 Lex 和 Yacc 等。因此,虽然 'C' 本身不能直接适应这一点,但如果您构建主机工具,它就可以。

在这个特定的例子中,重载可能没有意义。 但是,对于需要任意精度数学的程序来说,它可能很有意义。

你不能在 C 中重载这些运算符。

C 根本不支持运算符重载。

您只能将操作实现为函数:

Colour colour_add(Colour c1, Colour c2);
Colour colour_substract(Colour c1, Colour c2);
...

您也可以切换到 C++,但仅仅为了重载而这样做可能有点过分。

运算符重载在 C 中不可用。相反,您必须使用一个函数来“伪重载”运算符:

Colour add_colours(Colour c1, Colour c2) {
    return c1 + c2; // or whatever you need to do
}

如果你想要比较简洁,使用宏是最好的选择:

void Type_getSomething(int id); //or some other complex series of instructions

#define g(id) Type_getSomething(id)

...很遗憾,宏无法使用方括号!

C 不支持运算符重载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM