#include <iostream>
#include "Log.h"
using String = std::string;
class Entity {
private:
String m_Name;
public:
Entity() : m_Name("Unknown") {};
Entity(const String& name) : m_Name(name) {};
const String& GetName() const { return m_Name; };
};
int main() {
}
我的问题是 Entity(const String& name) : m_Name(name) {};
这里直接 Entity( String& name)
不是也可以吗,不需要这个const,以下是chat的回答,很精确:
您提出了一个很好的问题!
在C++中,当作为参数传递的时候,如果使用常量引用(const T&)比传值(T)或非常量引用(T&)更好。
原因有几点:
-
传递常量引用可以避免不必要的复制开销。因为它不会复制参数,只会传递一个引用。
-
传递常量引用可以避免参数被无意间修改。因为它使参数成为只读的。
-
传递常量引用可以让函数接受临时值和字面值作为参数。因为临时对象不能绑定到非常量引用上。
所以在Entity构造函数中,使用const String& name更好,因为:
-
避免字符串的复制开销
-
保证构造函数不会修改传入的name
-
允许使用临时字符串作为参数,比如 Entity(“Temp”)
而如果使用String& name,则有复制开销,并且可以修改参数,不够安全。
所以使用const String& name综合各方面考虑更好。
总结一下,在C++中尽量用常量引用传递参数,可以提高效率、安全性并提供更灵活的使用方式。