调用构造函数,而无需将其分配给任何变量C
Calling constructor without assigning it to any variable c++
这可能是一个非常愚蠢的问题,但是我什至不知道我应该写些什么来寻找答案。我什至不确定我给出的标题是否正确。
如果我有这样的构造函数:
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};
。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 尝试摆脱任何堆内存分配
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 使用运营商New分配的数据结构是否有任何副作用
- 我可以将指针作为指针转向课程,以便我可以使用分配给同类指针的任何内容
- 友元函数将内存分配给数组成员是否有任何限制?
- 分配运营商为什么返回任何开始
- c++:何时初始化声明的变量而不将其分配给任何值
- 如果使用#Define而没有任何分配值,它将做什么
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- getline 没有为字符串对象分配任何值
- 调用构造函数,而无需将其分配给任何变量C
- 对于数据成员,如果包含对象已在动态内存中,则动态分配此变量(或不动态分配)之间是否有任何区别
- 动态分配 2D 数组,无需使用任何循环
- CORBA::String_var -> 我无法为这种类型的类字段分配任何值
- 不分配任何字符内存的常量字符串构造函数?
- 仅通过指针强制转换使类类型可互换,而无需分配任何新对象
- 字符 *str;str= "HELLO" ;如何在不为字符串分配任何内存的情况下工作?
- 如何创建可以在 c++ 中分配任何类型的对象
- 为什么我不能再为数组分配任何东西