核心bada接口是否基于C+的不当使用而构建+;构造? 几年前,我浏览了刚刚发布的三星BADA SDK和相关资料,我惊讶于“教程”和“指南”的数量,试图通过在C++语言层中有明显错误的错误构造的样本来澄清语言和平台的各个基本方面。(也就是说,见三星发布的演示文稿第8页和第9页,代码示例是原创的,我在SDK中也看到过类似的东西)。但它相对较新,所以我想他们会清理它

核心bada接口是否基于C+的不当使用而构建+;构造? 几年前,我浏览了刚刚发布的三星BADA SDK和相关资料,我惊讶于“教程”和“指南”的数量,试图通过在C++语言层中有明显错误的错误构造的样本来澄清语言和平台的各个基本方面。(也就是说,见三星发布的演示文稿第8页和第9页,代码示例是原创的,我在SDK中也看到过类似的东西)。但它相对较新,所以我想他们会清理它,c++,language-lawyer,bada,C++,Language Lawyer,Bada,最近有一件事让我想起了一件不能被当作“打字错误”或“意外错误的代码示例”而忽略的事情: 虚拟结果Osp::Base::Collection::IList::Add(const Object&obj)[纯虚拟] 参数: [in]obj要添加的对象 备注: 此方法执行浅层复制。它只添加指针,而不是元素本身。 ..… 虚拟对象*Osp::Base::Collection::IList::GetAt(int-index)[纯虚拟] 对我来说,从“经典C++”的角度来看,这是一个明显的错误。它在很多方

最近有一件事让我想起了一件不能被当作“打字错误”或“意外错误的代码示例”而忽略的事情:

虚拟结果Osp::Base::Collection::IList::Add(const Object&obj)[纯虚拟]
参数:
[in]obj要添加的对象
备注:
此方法执行浅层复制。它只添加指针,而不是元素本身。
..…

虚拟对象*Osp::Base::Collection::IList::GetAt(int-index)[纯虚拟]

对我来说,从“经典C++”的角度来看,这是一个明显的错误。它在很多方面都是错误的:

  • 它接受通过引用存储在列表中的泛型对象。在备注中,有一点需要注意,它将不是通过复制、不是通过引用而是通过指针来存储。使用ref而不是指针可能会迫使实现者执行一些强制转换/*/&s,但这是一个相对较小的问题

  • 接受的引用是const。项访问器GetAt()实际返回非const对象!因此集合de'const'会自动为您显示所有内容

  • 各种指南中有很多警告,告诉您不要在列表中添加()基于堆栈的对象或临时对象。它们明确地告诉您只添加()基于堆的对象,由
    new
    分配

  • GetAt实际上返回非常量指针,而不是引用!可能能够作为错误返回一个神奇的值(在BADA中没有异常处理…)。现在看一些关于列表处理的教程,观察所有分散在最令人惊讶的地方的*s和&s,如:

    MyObj* x = new MyObj();
    list.Add(*x);           // the '*' is at least mighly misleading..
    
    这就引出了一些令人惊讶的问题,比如说,这个可怜的人真的很困惑。但是我开始离题了

  • 以上是其中一个核心接口的片段,稍后将由各种核心集合实现和使用。实际上,所有哈希/列表/等都有类似的hm..约定

    对我来说,它看起来是由一个受过训练的人设计的,比如java或C++,对C++语言的了解很少。Const被滥用,引用也是如此。而且,我也不认为<强>任何理由< /强>这个* /p> 我的判断错了吗?你知道为什么这些接口是这样设计的吗?确切地说,我想解释一下:

    • 为什么他们使用“const”,而它不是真正的意思,也不是保留的
    • 为什么他们在评论中使用了未被使用的引用语
    (*)好吧,除了城市神话“引用不能为NULL”之外,这可能表明“Add”不能接受NULL指针。尽管如此,这仍然是一个疯狂的想法,因为添加元素需要取消引用
    Add(*ptr)
    ,因此很容易注意到引用肯定可以为空

    编辑/提问理由:

    在Mike发表了即时且内容明确的评论后,我试图尽可能多地删除文本中的“rant”,这很可能是因为我有时会产生“纯粹主义”情绪。尽管如此,如果不听起来像是在抱怨错误,就很难提出错误。我不是bada开发者。我没有任何真正的理由咆哮。我的问题不是修辞性的:我真的想知道这种设计的原因。我不接受简单的“因为这个/那个开发人员是坏的”。这是可能的,我也想到了,但我拒绝这样的推理,因为我不是无所不知的,因为,嗯,那是完全不可能的。我这么问是因为这让我很困扰,我想知道原因。我希望一些有经验的bada开发人员会出现,并向我指出一些我无法用谷歌搜索到的描述它的文章,或者删除一些历史信息,这些信息将实际证明这是从pre-std-C++Symbian借用来的。我不指望快速反应。事实上,我认为这个问题不会得到回答,因为地球上可能没有多少人能够提供这样的信息。然而,这并不意味着这个问题是修辞性的,在我看来,也不意味着它是非问题性的。当然,每个人都有不同的看法。如果是,它将关闭。

    这根本没有很好的工程理由。C++的标准化是一个典型的ISO过程,开放性和文档化。有数千份公开文件可用,许多专家与社区密切相关。自从STL集成到标准C++中,这种特殊的样式已经被弃用,1996。 更糟糕的是,这些BADA集合不给标准C++添加功能,所以它们是非常冗余的。p>
    商业原因可能是所有优秀的三星工程师都在编写真实代码,而不是Bada。这是,我很抱歉这么苛刻,业余水平

    你有具体的问题吗?我能从你的漫谈中得到的只有(a)为什么常数的正确性有点不可靠?(b) 他们为什么决定存储指向外部管理对象的指针?(c)为什么他们使用指针,在那些你更喜欢引用和引用的地方,你更喜欢指针?我想他们需要C++的灵活性,但是java的方便性。但谁真的在乎呢?我想,