相关疑难解决方法(0)

一行断言以测试STL容器是否已排序

有没有办法写一个单行条件,如果STL容器被排序,它将返回true?有问题的容器是std :: vector

我打算在断言中使用它

c++ arrays assert stl

13
推荐指数
2
解决办法
3053
查看次数

使用或不使用C++ 0x功能

可能重复:
你今天如何使用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++ standards coding-style c++11

11
推荐指数
3
解决办法
1376
查看次数

"backporting"nullptr到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++ backport nullptr forward-compatibility c++03

9
推荐指数
1
解决办法
3834
查看次数

工具链支持C++ 11标准

我目前正在将我对C++的知识更新为新标准.它让我觉得自己像个小孩子才能拥有最棒的玩具:我想一直玩它,但我不想因为它而失去我的朋友.

我参与了一些开源项目,其中一些新功能非常有用,所以我非常热衷于使用它们.我的问题是有多少用户可以编译C++ 11代码,例如,普通公众中C++ 11-complete编译器的采用率是多少?有没有人有相关信息?

我知道gcc 4.8.1clang 3.3是完整的C++ 11功能,但我不知道有多少人真正使用了最新的编译器.我知道大多数codemonkeys肯定会这样做,但是普通的开源用户呢?拍摄潜在用户并告诉他们更新他们的编译器并不是一个真正的选择.

我知道这个问题可能因为与这些问题相似而受到批评/关闭:

  1. 你今天如何使用C++ 11?
  2. 使用或不使用C++ 0x功能

我想指出现在情况有所不同,因为我们正在谈论一个实际批准的标准.我相信,在编程实践中,了解其采用率非常重要.

c++ c++11

7
推荐指数
1
解决办法
1288
查看次数

完美地模拟nullptr

我厌倦了等待编译器的支持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和真实交易还有什么不同?

c++ null nullptr c++11

5
推荐指数
1
解决办法
1439
查看次数

我可以通过for_each <algorithm>在C++中的指针向量上调用`delete`吗?

假设我有一个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)

你怎么看?

c++ memory foreach delete-operator

3
推荐指数
2
解决办法
6934
查看次数