有时我需要实例化一个类才能调用它的一个方法。例如,在Qt。中阅读注册表。
QSettings settings;
settings.setValue( DEST_FOLDER, destDir );
但我改用这种语法。
QSettings().setValue( DEST_FOLDER, destDir );
它有效,但我没有看到任何关于它的文档,它叫什么?我搜索了“无名的c ++类”,但它没有出现。有一个匿名课程,但我认为这是不同的。
我的问题是它有点像调用构造函数。这种语法有名称吗?有人可以解释或指向我这种初始化的文档吗?愚蠢的问题但这样做不好吗?
答案 0 :(得分:7)
QSettings().setValue( DEST_FOLDER, destDir );
将为您提供QSettings
的默认构造临时实例,它将一直存在,直到完整表达式结束,在这种情况下,行尾的;
,然后在所述临时内容上调用setValue(...)
。
您可以通过这种方式调用您想要的每个构造函数,而不仅仅是您在示例中调用的默认构造函数。如果是class A
有一个构造函数和一个成员函数fun
,只需一个int
,
A(5).fun(20);
将通过A
创建A::int(5)
类型的临时对象,然后在A::fun(int i)
上调用i = 20
。
这是允许和保存的,这实际上是否有意义取决于你最后调用的方法。
请注意,类本身既不是无名也不是临时的,只有您创建的实例是。
答案 1 :(得分:1)
"我的问题是它有点像调用构造函数。这种语法是否有名称?"
是的,它被称为创建临时右值
"有人可以解释或指出这种初始化的文档吗?"
这是一个基本的c ++功能,可以在C++ standard specification中提供文档。
"愚蠢的问题,但这样做不好吗?"
完全取决于QSettings
实际提供的功能,并且这些调用会保留设置,如您所愿。