有没有办法写一个单行条件,如果STL容器被排序,它将返回true?有问题的容器是std :: vector
我打算在断言中使用它
可能重复:
你今天如何使用C++ 0x?
我正在与一个相当新系统的团队合作.我们正在谈论迁移到MSVC 2010,我们已经迁移到GCC 4.5.这些是我们使用的唯一编译器,我们没有计划很快将代码移植到不同的编译器.
我建议在我们这样做之后,我们开始利用已经提供的一些C++ 0x功能,比如auto.我的同事暗示反对这一点,建议等待"直到C++ 0x实际上成为标准." 我不同意,但我可以用他的措辞来看待它的吸引力.尽管如此,我还是忍不住认为这种反驳更多的是出于对学习C++ 0x的恐惧和恐惧,而不是对标准化的真正关注.
鉴于系统的新状态,我希望我们能够利用现有的新技术.例如,auto就会让我们的日常生活更轻松(只需编写基于迭代器的循环,直到基于范围的循环出现,例如).
我觉得这个错了吗?我并不是在提议我们从根本上改变我们萌芽的代码库,而只是在方便的时候开始使用C++ 0x功能.我们知道我们正在使用哪些编译器并且没有立即移植的计划(如果我们曾经移植过代码库,那么当然编译器也可以使用C++ 0x功能以及目标平台).除此之外,我似乎在1997年避免使用iostreams,因为尽管所有编译器都已经以便携方式提供它们,但ISO C++标准尚未发布.
如果你们都同意,你能否提供我可以用来巩固我的立场的论据?如果没有,我可以获得更多关于"直到C++ 0x是标准"的想法吗?顺便说一句,有人知道什么时候会这样吗?
或多或少的标题暗示.虽然我还没有使用C++ 0x,但是我想在它发生时做好准备,而且我还想减少我必须重写的代码量才能使用它的一些功能.这样我就可以一次性地向前和向后兼容.
我发现的最有趣的一个是nullptr,我最近经常使用它.
在检查了"官方解决方法"和Meyer的建议之后,我决定在我的C++和未来的C++ 0x程序中使用它.第二部分很简单 - 作为关键字,nullptr只需支持.但第一部分让我感到有些不适.
Meyers提案的功能如下:
class nullptr_t { // ? this is my issue
// definition of nullptr_t
} nullptr = { };
Run Code Online (Sandbox Code Playgroud)
该提议的问题在于它声明了要声明为std::nullptr_tC++ 0x所需的类型.这意味着对于"感觉原生"的解决方法,必须通过重新打开std::命名空间来添加类型.我理解在C++程序中这是非法的(不像添加特殊化,这显然是皱眉和放开警告).
我想用nullptr在舒适和在C++程序合法的方式.我想到的一个选项是在另一个命名空间中声明类型然后使用它using:
namespace mylibrary {
class nullptr_t {
....
} nullptr = { };
// end namespace
}
// These would have to go in the header file.
using mylibrary::nullptr;
using …Run Code Online (Sandbox Code Playgroud) 我目前正在将我对C++的知识更新为新标准.它让我觉得自己像个小孩子才能拥有最棒的玩具:我想一直玩它,但我不想因为它而失去我的朋友.
我参与了一些开源项目,其中一些新功能非常有用,所以我非常热衷于使用它们.我的问题是有多少用户可以编译C++ 11代码,例如,普通公众中C++ 11-complete编译器的采用率是多少?有没有人有相关信息?
我知道gcc 4.8.1和clang 3.3是完整的C++ 11功能,但我不知道有多少人真正使用了最新的编译器.我知道大多数codemonkeys肯定会这样做,但是普通的开源用户呢?拍摄潜在用户并告诉他们更新他们的编译器并不是一个真正的选择.
我知道这个问题可能因为与这些问题相似而受到批评/关闭:
我想指出现在情况有所不同,因为我们正在谈论一个实际批准的标准.我相信,在编程实践中,了解其采用率非常重要.
我厌倦了等待编译器的支持nullptr(gcc 4.6确实如此,但它是如此新的少数发行版支持它).
因此,作为一个止损间隙直到nullptr完全支持我决定模仿它.有两个仿真示例:一个来自这里,一个来自wikibooks.
值得注意的是,两个实现都没有提及operator ==.但是,没有一个,以下代码将无法编译.
int* ptr = nullptr;
assert( ptr == nullptr ); // error here: missing operator ==
Run Code Online (Sandbox Code Playgroud)
这个operator ==错误是编译器错误吗?
是operator ==(和!=,<,<=,等)需要更完美的模拟nullptr?
模拟nullptr和真实交易还有什么不同?
假设我有一个std::vector<Obj *> objs(出于性能原因,我有指针而不是实际的Objs).
我obj.push_back(new Obj(...));反复填充它.
完成后,我必须delete使用推回元素.一种方法是这样做:
for (std::vector<Obj *>::iterator it = objs.begin(); it != objs.end(); ++it) {
delete *it;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我可以使用for_each算法来做同样的事情,我感兴趣:
#include <algorithm>
...
for_each(objs.begin(), objs.end(), delete);
Run Code Online (Sandbox Code Playgroud)
你怎么看?