在C ++中创建临时无名类实例

时间:2015-07-15 17:29:31

标签: c++

有时我需要实例化一个类才能调用它的一个方法。例如,在Qt。中阅读注册表。

QSettings settings;
settings.setValue( DEST_FOLDER, destDir );

但我改用这种语法。

QSettings().setValue( DEST_FOLDER, destDir );

它有效,但我没有看到任何关于它的文档,它叫什么?我搜索了“无名的c ++类”,但它没有出现。有一个匿名课程,但我认为这是不同的。

我的问题是它有点像调用构造函数。这种语法有名称吗?有人可以解释或指向我这种初始化的文档吗?愚蠢的问题但这样做不好吗?

2 个答案:

答案 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实际提供的功能,并且这些调用会保留设置,如您所愿。