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

C++ 在C+;中创建临时匿名类实例+;,c++,C++,有时我只需要实例化一个类来调用它的一个方法。例如,在Qt中读取注册表 QSettings settings; settings.setValue( DEST_FOLDER, destDir ); 但是我使用这个语法 QSettings().setValue( DEST_FOLDER, destDir ); 它可以工作,但我没有看到任何关于它的文档,它叫什么?我搜索了“无名C++类”,但它没有出现。有匿名课程,但我认为那是不同的 我的问题是它有点像调用构造函数..这种语法有名字吗?有人能给我解

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

QSettings settings;
settings.setValue( DEST_FOLDER, destDir );
但是我使用这个语法

QSettings().setValue( DEST_FOLDER, destDir );
它可以工作,但我没有看到任何关于它的文档,它叫什么?我搜索了“无名C++类”,但它没有出现。有匿名课程,但我认为那是不同的

我的问题是它有点像调用构造函数..这种语法有名字吗?有人能给我解释一下或给我指一下这种初始化的文档吗?愚蠢的问题,但这样做不好吗

QSettings().setValue( DEST_FOLDER, destDir );
将为您提供一个默认构造的
QSettings
临时实例,该实例将一直存在到完整表达式的末尾,在本例中为
在该行的末尾,然后对所述临时变量调用
setValue(…)

您可以通过这种方式调用所需的每个构造函数,而不只是像您在示例中所做的那样调用默认构造函数。例如,如果
A类
有一个构造函数和一个成员函数
fun
,该函数取单个
int

A(5).fun(20);
将通过
a::int(5)
创建类型为
a
的临时对象,然后调用
a::fun(int i)
,并在其上设置
i=20

这是允许的和安全的,这是否真正有意义取决于您调用的方法最终会做什么

请注意,类本身既不是匿名的,也不是临时的,只有您创建的实例是匿名的

“我的问题是,这有点像调用构造函数……这种语法有名字吗?”

是的,这叫做创建临时右值

“有人能给我解释一下或给我指一下这种初始化的文档吗?”

这是一个基本的C++特性,文档可以在./p>中给出。 “愚蠢的问题,但这样做不好吗?”


完全取决于实际提供的功能,这些类型的调用会按照您的意愿保留设置。

您描述的是一个“临时”或“r值”。该类既不是无名的(称为
QSettings
),也不是临时的(它就在那里,而且永远都在那里).Kerrick SB可能暗示您可能混淆了术语“类”和“实例”,不是类是“无名”,而是
QSettings().setValue(DEST_文件夹,destDir)中使用的临时变量(这样做没问题)投票否决我的问题的人必须知道你反对传播知识:)所以基本上你可以像这样调用任何构造函数!这就是我想知道的,它的行为几乎就像构造函数是静态的一样。构造函数是特殊的,但我从未在任何文档中见过这样的情况,你可以调用这样一个无名的类实例。@zadane-well构造函数不是真正的
静态的
,但是,它当然不需要调用现有实例,因为它首先是创建实例的机制。