"MyClass mc = MyClass()"还是"MyClass mc"?
"MyClass mc = MyClass()" or "MyClass mc"?
两者有什么区别
MyClass mc = MyClass();
和
MyClass mc;
在C++?
第一个调用复制构造函数,将临时对象作为参数 - MyClass()
创建临时对象。
第二个调用默认构造函数。
实际上,在大多数情况下,它们针对相同的代码进行了优化,但这是语义上的区别。
正如 Negal 所提到的,POD 类型的情况略有不同;当 "MyClass" 是 POD 时,第二个代码片段不会对mc
进行值初始化,而第一个代码片段会。
第一个是复制初始化,第二个是默认初始化。
例如,以下代码将无法编译:
class MyC
{
public:
MyC(){}
private:
MyC(const MyC&) {}
};
int main()
{
MyC myc = MyC();
return 0;
}
自定义复制构造函数和默认构造函数。
首先通过c-tor without arguments
创建temp-object
,然后为对象调用copy-ctor
(不考虑任何优化)。第二次调用c-tor without arguments
,没有副本。通过编译器优化,这两种情况是相等的。
区别在于基本类型,因此
// initialized to something
int c;
// initialized to int() that is 0 by standard.
int c = int();
没有区别。 默认 ctor 调用。 语法糖 )没有复制控制!!!
class PPP{
public:
PPP(PPP&){
std::cout<<"PPP1"<<std::endl;
}
PPP(const PPP&){
std::cout<<"PPP2"<<std::endl;
}
PPP(){
std::cout<<"PPP3"<<std::endl;
}
};
PPP ppp = PPP();
而且您在控制台中只能找到 PPP。
相关文章:
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 反转C++ foo(MyClass &) vs foo(const MyClass &)
- 从 json 字符串将 QVariant 转换为 QList<MyClass>
- #include "MyClass.h" 和 #include ".myclass.h" 有什么区别
- MyClass obj = MyClass();'MyClass()'在这里指的是临时对象吗?
- 'return':无法从'const class myClass'转换为'class myClass &'
- 如何初始化 const std::vector<MyClass>
- "delete p"和"p->~MyClass()"之间的区别
- 'class MyClass' 在尝试定义静态结构实例时不会命名类型
- 注意:候选:MyClass:MyClass(const MyClass&) 错误
- 使用 MC 方法计算积分
- std::set<myClass*>排序
- 复制构造函数语法错误:myclass 没有成员 mymember
- 如何通过扩展以下类型特征来删除 decltype(&MyClass::funct) 部分?
- Qt C++ - 创建 QList<Myclass> - 不是参数 'T 的有效模板类型参数
- 没有已知的转换为'float (MyClass::*)' 'float (*)'
- 如何从函数中返回 std::可选<myclass>?
- 运算符 MyClass*() 是什么意思
- 巨大的fibonacci模mC++
- "MyClass mc = MyClass()"还是"MyClass mc"?