Ala*_*jeu 192 c++ c++-faq c++11
有了新的标准,就会有新的做事方式,而且许多方式比旧方法更好,但旧的方式仍然很好.由于向后兼容的原因,新标准也没有正式弃用.所以剩下的问题是:
旧的编码方式肯定不如C++ 11样式,我们现在可以做些什么呢?
在回答这个问题时,你可以跳过诸如"使用自动变量"之类的显而易见的事情.
Sum*_*ant 173
final防止类派生的说明符std::auto_ptr由于对rvalue引用的一流支持,不再需要工作的神奇方式.shrink_to_fit()成员函数,这应该消除了与临时交换的需要.= delete语法是一种更直接的方式,表示明确拒绝特定功能.这适用于防止堆分配(即=delete成员operator new),防止复制,分配等.result_of:类模板的使用result_of应替换为decltype.我想result_of使用decltype时,可用它.NULL应该被重新定义为nullptr,但是请参阅STL的讲话以了解他们为什么决定反对它.我想我会在那里停下来!
How*_*ant 65
在某个时间点,有人认为应该按const价值而不仅仅按价值返回:
const A foo();
^^^^^
Run Code Online (Sandbox Code Playgroud)
这在C++ 98/03中几乎是无害的,甚至可能会发现一些看起来像的错误:
foo() = a;
Run Code Online (Sandbox Code Playgroud)
但返回const是在C++ 11中禁忌的,因为它禁止移动语义:
A a = foo(); // foo will copy into a instead of move into it
Run Code Online (Sandbox Code Playgroud)
所以请放松并编码:
A foo(); // return by non-const value
Run Code Online (Sandbox Code Playgroud)
How*_*ant 61
只要你放弃0并NULL赞成nullptr,就这样做!
在非通用代码中使用0或NULL不是一个大问题.但是一旦你开始在泛型代码中传递空指针常量,情况就会迅速改变.当你传递0给一个template<class T> func(T) T推导为一个int而不是一个空指针常量.并且在此之后它不能被转换回空指针常量.如果只使用宇宙,这就会陷入一个根本不存在的问题的泥潭nullptr.
C++ 11不会弃用0,也不会NULL作为空指针常量.但你应该像编码那样进行编码.
ken*_*ytm 38
安全bool成语 → explicit operator bool().
私有拷贝构造函数(boost :: noncopyable)→ X(const X&) = delete
使用私有析构函数和虚拟继承模拟最终类 →class X final
Kla*_*aim 24
让您避免在C++ 11中编写基本算法的一个原因是lambdas的可用性与标准库提供的算法相结合.
我现在正在使用它们,通过使用count_if(),for_each()或其他算法而不是必须再次编写该死的循环,你经常告诉你想要做什么是令人难以置信的.
一旦你使用带有完整C++ 11标准库的C++ 11编译器,你就没有理由不使用标准算法来构建你的.Lambda就是杀了它.
为什么?
在实践中(在我自己使用这种编写算法的方式之后),阅读用简单的单词构建的东西比用一些你必须解密以了解其含义的循环所做的更容易.也就是说,自动推导出lambda参数会有助于使语法更容易与原始循环相媲美.
基本上,使用标准算法制作的读取算法比隐藏循环的实现细节的单词要容易得多.
我猜想现在我们必须考虑更高级别的算法才能构建更低级别的算法.
Phi*_*ipp 10
您需要swap更少地实现自定义版本.在C++ 03中,swap通常需要有效的非投掷以避免代价高昂且丢弃副本,并且由于std::swap使用两个副本,因此swap通常必须进行自定义.在C++中,std::swap使用move,因此焦点转移到实现高效和非投掷移动构造函数并移动赋值运算符.因为对于这些,默认通常很好,这将比C++ 03中的工作少得多.
一般来说,很难预测哪些成语会被使用,因为它们是通过经验创造出来的.我们可以期待明年的"Effective C++ 11"和"C++ 11编码标准"仅在三年内,因为还没有必要的经验.
| 归档时间: |
|
| 查看次数: |
24492 次 |
| 最近记录: |