几年前,我把C ++技巧放在架子上,现在看来,当我再次需要它们的时候,风景已经改变了。 我们现在已经有了C ++ 11,我的理解是它重叠了许多Boost特性。 是否有一些总结,其中重叠的谎言,哪些Boost库将成为传统,推荐哪些C ++ 11function使用,而不是提升,哪个更好?
新标准有了新的办法,有许多比老办法好,但老办法还是不错的。 出于向下兼容性的原因,新标准也没有被正式弃用。 所以现在的问题是: 旧的编码方式肯定比C ++ 11风格差,我们现在可以做些什么呢? 在回答这个问题时,你可以跳过“使用自动variables”这类显而易见的东西。
为什么C ++标准库中std::list类的反向函数具有线性运行时? 我认为对于双向链表,反向函数应该是O(1)。 倒转一个双向链表只需要切换头部和尾部的指针。
有时声称,即使仅仅编译C ++ 98代码,C ++ 11/14也可以提高性能。 理由通常是沿着移动语义的线,因为在某些情况下,右值构造函数是自动生成的或现在是STL的一部分。 现在我想知道这些情况以前是否已经由RVO或类似的编译器优化处理过。 我的问题是,如果你能给我一个C ++ 98代码的实例,不加修改,使用支持新语言function的编译器运行得更快。 我明白一个标准的编译器不需要做copy copy,因此移动语义可能会带来速度,但是如果你愿意的话,我希望看到一个较less的病态的情况。 编辑:只是要清楚,我不问新的编译器是否比旧的编译器更快,而是如果有代码,将-std = c ++ 14添加到我的编译器标志将会运行得更快(避免副本,但如果你除了移动语义之外还能想出其他的东西,我也会感兴趣的)
在clang的C ++ 11状态页面中find了一个叫做“* this的右值引用”的提议。 我读了很多关于右值的引用并理解了它们,但我不认为我知道这个。 我也无法使用这些条款在网上find很多资源。 有一个链接到页面上的提案文件: N2439 (将移动语义扩展到*这个),但我也没有从那里得到很多例子。 这个function是关于什么的?
我可以看到为什么C ++ 11中的autotypes提高了正确性和可维护性。 我读过,它也可以提高性能( 几乎总是自动通过香草萨特),但我想念一个很好的解释。 auto如何提高性能? 任何人都可以举个例子吗?
我有两个用例。 答:我想通过两个线程同步访问队列。 B.我想通过两个线程同步访问一个队列,并使用一个条件variables,因为其中一个线程将等待内容被另一个线程存储到队列中。 对于用例AI,请参阅使用std::lock_guard<>代码示例。 对于用例BI,请参阅使用std::unique_lock<>代码示例。 两者之间有什么区别,哪一个应该在哪个用例中使用?
我知道至less有一个C ++ 11的变化会导致一些旧的代码停止编译:在标准库中引入explicit operator bool() ,replaceoperator void*()旧实例。 当然,这个会破坏的代码可能是代码本来不应该是有效的,但它仍然是一个突破性的变化:过去不再有效的程序。 有没有其他突破的变化?
首先,我不是在问这个问题,因为垃圾回收的优点。 我问这个问题的主要原因是我知道Bjarne Stroustrup曾经说C ++在某个时间点上会有一个垃圾收集器。 这就是说,为什么没有添加? C ++已经有一些垃圾收集器了。 这只是其中一个“容易说什么”types的东西? 还是还有其他的原因没有被添加(并且不会被添加到C ++ 11中)? 交叉链接: 垃圾收集器的C + + 为了澄清,我明白了C ++在第一次创build时没有垃圾回收器的原因。 我想知道为什么collections家不能被添加进去。
unique_ptr<T>不允许复制构造,而是支持移动语义。 然而,我可以从一个函数返回一个unique_ptr<T> ,并将返回的值赋给一个variables。 #include <iostream> #include <memory> using namespace std; unique_ptr<int> foo() { unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); // 2 } int main() { unique_ptr<int> p = foo(); cout << *p << endl; return 0; } 上面的代码编译和按预期工作。 那么第1行如何不调用复制构造函数并导致编译器错误呢? 如果我不得不使用第二行,那么它是有道理的(使用第二行也是如此,但我们并不需要这样做)。 我知道C ++ 0x允许这个exception为unique_ptr因为返回值是一个临时对象,一旦函数退出就会被销毁,从而保证了返回指针的唯一性。 我很好奇这是如何实现的,在编译器中是特殊的,还是在语言规范中有一些其他的子句呢?