你最不喜欢的一些你最喜欢的C ++ 0x功能是什么?

时间:2010-01-10 19:44:45

标签: c++ c++11

虽然我很兴奋C ++ 0x编程比C ++ 98更有趣,但我有时觉得有些新功能会留下一些重要的东西。
对于例如初始化程序列表不能推断为对数组的引用,可变参数模板不允许成员包或任意表达式扩展,本地类不能是模板或包含模板或具有类内成员初始化程序,lambdas不能是模板, constexpr无法帮助编译字符串文字的时间处理,用户定义的字符串文字不能是模板(而用户定义的数字文字可以是),在某些情况下,decltype的行为会根据你是否将其操作数括起来而显着不同(我更喜欢单独的'exprtype')。

我认识到标准委员会必须做出一些非常困难的选择和妥协(因为它实际上并不意味着创新,因为它的资源非常有限),我深深地尊重他们并且非常感谢他们做他们做的事。这篇文章并不意味着诋毁他们的努力(我非常期待使用C ++ 0x) - 但要衡量其他人对这些功能的看法有多强烈。

考虑到这一点,我向您提出以下问题:

1)您完全满意的新功能有哪些?
2)您对部分满意的新功能有哪些 - 以及如何让您更满意? 3)您希望哪些新功能绝对没有添加?

有关所有功能的列表,我将推荐您Stroustrup's List

谢谢!

3 个答案:

答案 0 :(得分:2)

我对C ++ 0x中的很多东西感到非常恼火。所有这些都是出于同样的原因 - 虽然新功能非常出色,但是向后兼容性的需求使得它们中的许多看起来像丑陋的黑客......

示例1:

SequenceClass(std::initializer_list<int> list);

而不是

SequenceClass(int... list); // or other nice in-language way

示例2:

class D [[base_check]] : public B {
    void sone_func1 [[override]] ();

而不是

class D : public B {
    override void sone_func1 ();

示例3:

std::shared_ptr<Target> m_target;

而不是

Target ^ m_target;

...好吧,最后一个是我自己的幸福:&gt;

当然所有这些都是主观的 - 很多人不喜欢它。令我恼火的是,我们必须保持向后兼容性,因此语言无法完全发展。在安全的情况下,特别非常烦人 - 我真的很想看到C风格的演员阵容消失......

我真的希望C ++有朝一日会采用“弃用”机制,类似于Khronos自2.0以来对OpenGL的做法。

答案 1 :(得分:1)

很好,他们有对齐和内存模型和线程本地的东西。这应该是在十年前,并且没有理由它应该花这么长时间。

委托构造函数是我永远想要的东西,但实现起来很糟糕。如果那是他们能做的最好的,那就应该删除。

几乎所有其他内容都只是添加了复杂功能而且更多初始化程序列表无意义。这就是为什么不能正确地委托构造函数的原因。他们应该尝试简化语言,而不是添加更多的元编程复杂性,这会产生很多问题。

答案 2 :(得分:0)

  1. lambdas,auto,rvalue references
  2. 模板化typedef;我认为语法很尴尬,但我很高兴它们以某种形式存在
  3. 概念。哦等等......我赢了