调用构造函数,而无需将其分配给任何变量C

Calling constructor without assigning it to any variable c++

本文关键字:分配 任何 变量 构造函数 调用      更新时间:2023-10-16

这可能是一个非常愚蠢的问题,但是我什至不知道我应该写些什么来寻找答案。我什至不确定我给出的标题是否正确。

如果我有这样的构造函数:

CError(const std::string& msg) { showMessage(msg) }

我想这样称呼它...

CError("some message");

...一切都起作用,但是当某个变量中指定字符串时,我发现了一个错误,即"不存在类的默认构造函数":

std::string str = "some message";
CError(str);

当我这样写时,它有效:

std::string str = "some message";
CError err(str);

,但我只是不需要此err对象。

谁能解释我为什么我不能只称构造函数本身?

预先感谢您的答案。

CError(str);被解析为CError str;,该线路定义了新变量str。我的编译器以不同的方式失败,这使问题更加明显:redefinition of 'str' with a different type

解决此问题的简单工作是施放对象:

(void)CError(str);

但是,燃烧的问题是:为什么这样做?如果您不打算以任何方式使用构造的对象,为什么不简单地使其成为静态成员函数,甚至只是一个普通的旧函数?

语句CError(str);被读取为定义类型CError的对象str;它等效于CError str;,但名称为str括号。

要解决此问题,您也可以将类型名称括起来:(CError)(str);。这迫使该陈述被理解为功能铸造表达。您可以等效地编写(CError) str;甚至static_cast<CError>(str);

在C 11中,您可以使用通用初始化语法来编写CError{str};