在阅读了列表初始化及其各种风格之后,我决定在我使用 Xcode 和 Objective-C++ 编写的 openGL ES 应用程序中测试一些功能,直到遇到一些相当模糊的东西。
我知道(并且经常实现)使用以下语法初始化 POD 的传统 C 样式结构初始化,例如 GLKVector2:
GLKVector2 point = { 0,0 }; //copy-initialized
但这种方法可能并不总是程序员想要的。因此,通过删除分配(和不必要的复制构造操作),有利于直接初始化,人们会假设(从文档中)上述声明看起来像这样:
GLKVector2 point{ 0,0 }; //direct-initialized, but generates compile error
但是,当代码如下所示时,编译器不会抱怨:
GLKVector2 point{ { 0,0 } };
对我来说,这似乎point
是从内部结构创建的临时直接初始化的{ 0,0 }
,因此与第一种方法相比没有任何优势;仍然必须分配和释放临时人员。
或者这个问题可能只是 GLKit 类型使用的 union/struct 布局的性质使编译器感到困惑。
在代码中进一步实现之前,对这种奇怪的语法进行一些澄清,将不胜感激