运算符在c(不是c ++)中重载是否可能?

And*_*ira 1 c c++

这个问题源于我需要将std :: string"转换"为char*形式.

我希望尽可能多地保留代码并包含大量"="初始化/赋值运算符.

标准c运算符存在于基本数据类型(int,char,float,指向等等).

是否有可能在c中重载赋值运算符?我想每个数据类型,因为它是自己的操作员,所以搞乱一个不会弄乱别人.

无论如何,这只是引起我兴趣的东西,因为我找不到很多关于如何实现C运算符的参考.

干杯

好吧,一些例子是有序的

std::string a_string;
a_string = "bla"
Run Code Online (Sandbox Code Playgroud)

或使用标准C.

char a_char_array[10];
strcpy(a_char_array,"bla");
Run Code Online (Sandbox Code Playgroud)

要么

char *a_char_pointer = "bla";
Run Code Online (Sandbox Code Playgroud)

我正在考虑的是将这3个用例替换为单个用例,我可以(通过#define)在使用char*或std :: string之间切换.

我想每个真正关心性能与编码速度的人都已经考虑过使用std :: string而不是char*的含义.使用stl的所有优点通常都是通过较低的性能(你不能总是得到你想要的东西?)而经常被淘汰(这甚至是一个字!?).

正如我所说,我有一个大型项目,我想亲眼看看使用一种方法或另一种方法的变化.

我的帖子标题是故意误导,因为我不希望这成为一个char*vs字符串战斗,但我想如果没有更多的细节,我无法真正解释我想要的东西.

干杯

Val*_*itz 11

如果在代码中看到std :: string,并且编译器没有抱怨,那么你有一个C++,而不是C.

  • @Andre:“就我而言,它们是同一种语言” - 不,C++ 和 C 不是同一种语言。是的,它们有相似之处,但它们实际上是不同的语言,并且两者之间的操作方式不同。您不能将正确的 C++ 硬塞到 C 中或将正确的 C 硬塞到 C++ 中并期望它以无摩擦的方式工作。 (2认同)
  • @Andre:听到这个我有多累:-(。性能解释是糟糕的软件开发人员的最后手段。如果你刚刚开始使用 C/C++(不到 1 年),确实有希望你会学习的。 (2认同)
  • @Andre:您可以以任何您喜欢的方式定义 C 语言,但是为了与*其他*开发人员进行交流,如果您使用与其他人相同的定义,它会有所帮助。对于我们其他人来说,C 和 C++ 是不同的语言。`std::string` (或者实际上,任何使用 `std` 命名空间或任何其他命名空间的内容)仅在 C++ 中可用。运算符重载仅在 C++ 中可用。明确询问有关 C 的问题,然后混合 C++ 功能和 C++ 示例代码是没有意义的。 (2认同)

kri*_*iss 6

C不允许任何类型的重载,运算符是内置的(直接转换为汇编代码).

根据您的实际代码库,可能会有一些使用宏的技巧,但无论如何我都会劝阻它.它可能会引入错误.只需使用普通功能.