【发布时间】:2019-04-04 00:06:54
【问题描述】:
类比萨(){
私人的:
整数值;
上市:
比萨(int x){
值 = x;
}
}
int main() {
// 引擎盖下面有什么区别?
比萨 p1 = 2;
比萨 p2(2);
}
我问这个的原因是,如果我有一个接受字符串的 Pizza 构造函数,
Pizza p3 = "这里的字母"; 比萨 p4("这里的信");带有 p3 的行会产生类型转换错误。这是因为它要采用的实际类型是 const char*。
带有 p4 的行可以正常工作。为什么“这里的字母”在()中时,它是一个字符串对象,但是当“这里的字母”只是在=符号后面时,它的类型是const char *。
【问题讨论】:
-
一个是赋值(
operator = (...)),另一个是构造函数。您应该使用 C++ 中的构造函数,它可能更有效。尽管进行了所有优化,但它通常在汇编中变成相同的代码。 -
@AlexisWilke 不正确。两者都是构造函数。
-
@AlexisWilke 都调用同一个构造函数!
-
请使用无效的代码发布 MCVE
-
示例代码中的构造函数采用整数,而不是字符串。请不要简化问题。如果问题需要一个接受字符串的构造函数,那么您的示例代码应该包含一个接受字符串的构造函数。
标签: c++