ata*_*man 8 c++ qt const-reference
我foo通过const ref以下方式调用方法:
// method, which is being called
void foo(const Entity & ent);
// call
Entity* e = new Entity;
foo(e); // wrong: missing * but compiles
Run Code Online (Sandbox Code Playgroud)
这段代码不仅编译,而且还创建了一个新的实例,Entity其默认值在范围内foo.我希望这不会编译或至少崩溃.
如果我把foo正确的(foo(*e)),一切工作为疑似,我看到的正确的价值观Entity中foo.
我使用Qt 4.7提供的mingw.
这是以下界面Entity:
class Entity : public QObject
{
Q_OBJECT
public:
Entity (QObject* parent = NULL);
long getId() const { return this->id; }
void setId(const long id) { this->id = id; }
QString getName() const { return this->name; }
void setName(const QString & name) {this->name = name; }
private:
QString name;
long id;
};
Run Code Online (Sandbox Code Playgroud)
Mar*_*k B 15
[编辑]你有一个隐式转换构造函数(也恰好是一个默认构造函数)从Entity*(通过父级QObject*)到Entity它,它被用来创建一个临时实例传入.
出于这个原因,我总是建议默认情况下使所有单参数可调用构造函数(例如,除了一个参数之外的所有参数都是默认的)显式并避免隐式转换运算符,除非它们完全执行在所有情况下预期的转换语义.在其他情况下,通过显式方法使转换可用.
有时隐式转换很有用,每个转换都应根据具体情况进行评估.