在C ++ 11中弃用了哪些C ++习惯用法
有了新标准,就有了新的办法,许多办法比老办法好,但老办法还是不错的。 出于向后兼容性的原因,这个新标准也没有被正式弃用。 所以现在的问题是:
旧的编码方式肯定比C ++ 11风格差,我们现在可以做什么呢?
在回答这个问题时,你可以跳过诸如“使用自动变量”这样的明显的东西。
final
说明符来防止类派生 shrink_to_fit()
成员函数,该函数应该消除临时需要的交换。 我想我会在那里停下来!
在一个时间点有人认为,应该通过返回const
的值,而不是仅仅通过值:
const A foo();
^^^^^
这在C ++ 98/03中几乎是无害的,甚至可能发现了一些看起来像这样的bug:
foo() = a;
但是通过const
返回在C ++ 11中是禁忌的,因为它禁止移动语义:
A a = foo(); // foo will copy into a instead of move into it
所以只需放松一下并编码:
A foo(); // return by non-const value
只要您可以放弃0
和NULL
来支持nullptr
,那就做!
在非泛型代码中,使用0
或NULL
不是什么大问题。 但是一旦开始在泛型代码中传递空指针常量时,情况会迅速发生变化。 当你将0
传递给一个template<class T> func(T)
T
被推导为一个int
而不是一个空指针常量。 之后它不能被转换回空指针常量。 如果宇宙只使用nullptr
,这就陷入了根本不存在的问题的泥潭。
C ++ 11不会将0
和NULL
作为空指针常量使用。 但是你应该像编码一样编码。