我试图重载一些运算符:
/* 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);
Run Code Online (Sandbox Code Playgroud)
我为每次尝试重载都收到此错误:
expected '=', ',', ';', 'asm' or '__attribute__' before '+' token
Run Code Online (Sandbox Code Playgroud)
关于运算符重载,我找不到任何好的文档.谷歌搜索结果导致使用类的C++教程.在C中没有类.谁能帮我?谢谢.
Jer*_*fin 58
C不支持运算符重载(超出它内置的语言).
Jus*_*ini 23
C中没有运算符重载.
art*_*ise 17
你需要一台时间机器带你回到1985年,所以你可以使用程序CFront.似乎'C'用于支持运算符重载; 到足够复杂,它仍然可以.见里面的C++对象模型由斯坦利·B·利普曼.OMG,C++是C!这样的事情仍然存在.
这个答案证实了其他人.'C'本身并不直接支持重载.但重要的是程序员可以编写能够理解代码的代码.您需要一个转换源来实现此功能的工具.在这种情况下,已经存在这样的工具.
由Edward D. Willink撰写的论文" Meta-Compilation for C++",2001年有一些有趣的设计功能实例,其中扩展语言很有用.*nix shell脚本和make
规则的组合通常允许这种转换.其他例子是Qt MOC,工具Lex和Yacc等.因此,虽然'C'本身不能直接适应这种情况,但如果您构建主机工具,它也可以.
在这个特定的例子中,重载可能没有意义.但是,对于需要任意精度数学的程序来说,这可能很有意义.
C根本不支持运算符重载.
您只能将操作实现为函数:
Colour colour_add(Colour c1, Colour c2);
Colour colour_substract(Colour c1, Colour c2);
...
Run Code Online (Sandbox Code Playgroud)
您也可以切换到C++,但仅仅为了重载可能有点过分.
C中没有运算符重载.相反,您必须使用函数来"伪过载"运算符:
Colour add_colours(Colour c1, Colour c2) {
return c1 + c2; // or whatever you need to do
}
Run Code Online (Sandbox Code Playgroud)