Object obj = Object() 和 Object obj() 有什么区别?
What's difference between Object obj = Object() and Object obj()?
我认为它有很多关于它的信息,但我不知道它是如何调用的。我无法理解下两个代码串之间的区别:
Object obj();
和
Object obj = Object();
你能解释一下吗?或者至少说一下如何称呼它。
Object obj();
不是对象的实例化,它是函数obj
的声明,该函数不接受参数并返回Object
的实例。
Object obj;
是default initialization
,即使用隐式构造函数实例化(因此,默认隐式构造函数或用户定义的无参数非explicit
构造函数),并且此声明调用非POD Object
成员的隐式构造函数,对于POD类型,它不初始化它们(它们不会被置零)。这对于Object
的成员的成员来说是正确的,依此类推。
Object obj{};
是列表初始化或聚合初始化 理论上是两步走的:1)创建临时 结论前 选择 或 如果您想要快速初始化而不归零其POD成员,请选择第一个。如果您想确保 实际上,在首次从其成员读取之前,这两种变体在所有现代操作系统上的运行时速度相同。 所以。。。 结论 使用值初始化: 除非您需要在奇异系统上的实时性能。Object obj = Object();
Object
实例;2) 然后通过复制构造函数/move构造函数/copy运算符/move运算符构造obj。但在实践中,它将是在考虑复制/移动省略的情况下默认构建的(默认情况下,在所有现代编译器上都会启用它,即使关闭了所有优化,也必须显式禁用省略)。最好不要使用这种变体。Object obj;
Object obj{};
Object
实例化后其所有POD成员都为零,请选择第二个。Object obj{};
Object obj();
声明的是函数,而不是对象!这是"Most Vexing Parse"的一个例子。
Object obj = Object();
要求Object
具有可访问的移动构造函数或复制构造函数(尽管编译器最终可能会删除移动/复制)。
创建对象的简单方法包括:
Object obj;
Object obj{};
Object obj();
声明一个名为obj
的函数,该函数返回一个Object
并且不接受任何参数。这通常不是你想要的。
Object obj = Object();
声明一个名为obj
的Object
,然后使用临时默认构造的Object
进行复制初始化。除非将对象重置回默认状态,否则通常也不希望执行此操作。
一般来说,如果你想在不调用构造函数的情况下进行构建,你可以使用
Object obj;
//or
Object obj{};
差异很大。
第一个是一个不带参数并返回Object的函数原型。
第二个通过调用默认构造函数来实例化对象。为避免疑义,不调用赋值运算符。
去掉第一种情况下的括号,使语句等效。
- 如何在.obj文件上运行IlDasm?
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 在 opengl 中渲染 obj 文件时出现黑窗口
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 正在读取 obj 文件!(指数)
- 我在主函数的左括号上不断收到错误,消息为obj\Debug\main.o||在函数"ZN11linked_listC1Ev"中:|
- C++将派生类转换为基类时'object slicing'期间发生的情况
- float* 已在 Gameobject.obj 中定义
- 可执行文件C++包括.obj,.lib和.dll吗?
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- C++成功复制动态分配的 obj 而不复制 ctor?
- OBJ 文件C++与 ubuntu 问题
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- Object obj = Object() 和 Object obj() 有什么区别?
- "Object *obj"和"Object &obj"的区别
- 构造函数 c++ Object obj = Object( "string" , 22);正在创建临时对象?