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