C 超载相等运算符.我应该写自己的功能以接受通过参考或值传递的参数
C++ overloading the equality operator. Should I write my function to accept argument passed by reference or value?
我想对简单struct
的运算符超载struct MyStruct {
public:
int a;
float b;
bool operator==( ) { }
}
我看到的所有示例似乎都使用a&。
通过参考来传递该值。,但我真的想按价值传递这些结构。
我写这本书有什么问题
bool operator== (MyStruct another) { return ( (a==another.a) && (b==another.b) ); }
,当您按价值通过时,您真的应该没关系。如果结构真的很重,则适用。在您引用的简单示例中,可能没有很大的区别。
说,通过const reference
,它更有意义,因为它清楚地表达了过载函数==
的意图。const
确保过载的函数意外地不会修改对象并通过参考可以使您免于制作副本。对于==
操作员,无需仅仅用于比较目的。
如果您担心一致性,最好按价值实例切换另一个通过,以通过const Ref。
虽然保持一致是值得称赞的目标,但不应该过分。仅包含" A"字符的程序将非常一致,但几乎没有用。通过某些技术方面的技术决策,传递机制并不是您出于一致性而做的事情。
。例如,在您的情况下,按值传递可能会导致更好的性能,因为结构足够小,并且在AMD64 ABI上(在任何64位Intel/AMD芯片上使用的结构都)它将通过登记册中传递,从而节省了通常与删除相关的时间。
在您的情况下,可以合理地假设该函数将被绑架,并且通过方案根本无关紧要(因为它不会传递)。这是由Codegen在这里证明的(生成的汇编中没有对operator==
的调用):https://gcc.godbolt.org/z/g7oege
相关文章:
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 当值传递给C++中的运算符重载函数时会发生什么
- 如何将非可变参数值传递给 fmt::format?
- 将 qml 项目值传递给 cpp 后如何与它们进行交互?
- NDK:将文本字段值传递给 c++ 字符串
- 如何将值传递给 lambda 函数
- 如何在C++中将std::string值传递给RegSetValueEx()
- 如何将 c ++ 变量的值传递给 hadoop HDFS 的 bash 系统命令?
- C++ 通过参数将值传递给 char 数组
- 如何将值传递给MFC消息映射函数on_command
- 使用JNI将长值传递给Java
- 如何在不使用 Argv 和 Argc 的情况下将 Sum 值传递给 C++ 程序
- 传递参考/值过载
- C++ 将值传递给 fStream
- 如何将函数中的多个值传递给C++中的不同函数
- 将多个解析值传递给 addPositionalArgument 函数
- C++为什么将左值传递给move构造函数对模板有效
- 一种自动检测对象的方法,该方法通过值传递给c++中的函数
- 将值传递给main(int,char**)
- 将大于long类型的最大值的值传递给C中的fseek