问题标签 [c++11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
26832 浏览

c++ - C++0x 中 C++ 枚举的基础类型

我一直在尝试阅读一些 C++ 标准,以了解枚举的工作原理。实际上比我最初想象的要多。

int对于范围枚举,除非使用 enum-base 子句另行指定(它可以是任何整数类型),否则基础类型很明显。

对于无范围的枚举,似乎基础类型可以是任何可以工作的整数类型,并且它不会大于 int,除非它需要。

由于无范围枚举的底层类型没有标准化,那么处理序列化枚举实例的最佳方法是什么?到目前为止,我一直int在写入时转换为,然后在读取时序列化为一个int并在开关中设置我的enum变量,但这似乎有点笨拙。有没有更好的办法?

0 投票
5 回答
476 浏览

c++ - 我应该根据新标准还是旧标准(规范)学习 C++?

好的,我正在考虑在未来几个月内进入 c++ 开发(没有确定日期)。我对语言(主要是C)隐约熟悉,以及OO、MI、模板、异常、模式、使用过的STL的一些基础知识。现在我正处于我想深入掌握这门语言的时间点。自然的问题是我应该
从当前的C++03还是C++0x标准开始。

请建议从用户到大师的最佳方式,因为新标准几乎就在这里,并且可能会在未来很多年保持不变。

谢谢

0 投票
1 回答
5780 浏览

c++ - C++0x 中的新 unicode 字符

我正在构建一个 API,它允许我获取各种编码的字符串,包括 utf8、utf16、utf32 和 wchar_t(根据操作系统可能是 utf32 或 utf16)。

  1. 新的 C++ 标准引入了新类型char16_t,并且char32_t没有这种大小的歧义,应该在将来使用,所以我也想支持它们,但问题是,它们是否会干扰正常uint16_t的 , uint32_t,wchar_t类型不允许重载,因为它们可能指的是同一类型?

    所以我可以写:

    /li>
  2. std::basic_string<char16_t>今天的typedef 是什么std::basic_string<char32_t>

    我找不到任何参考。

    编辑:根据 gcc-4.4 的标题,介绍了这些新类型:

    我只是想确保这是实际的标准要求,而不是 gcc-ism。

0 投票
3 回答
4397 浏览

c++ - 优化提升无序映射和集合,C++

我将解析 60GB 的文本并在地图中进行大量插入和查找。我刚开始使用 boost::unordered_set 和 boost::unordered_map 当我的程序开始填充这些容器时,它们开始变得越来越大,我想知道为这些容器预先分配内存是否是个好主意。类似 mymap::get_allocator().allocate(N); ?

还是我应该让他们自己分配和找出增长因素?代码看起来像这样

提前致谢

0 投票
2 回答
10945 浏览

c++ - C++0x 初始化列表示例

我想看看这个现有代码示例如何能够利用 C++0x 初始化程序列表功能。

示例0:

它会支持这样的事情吗:

示例 1:

还是必须有这样的文字?:

示例 2:

如果是这样,将如何处理 AskString 和 Ask 之间的差异?

0 投票
9 回答
720 浏览

c++ - 你开始使用 C++0x 了吗?

大多数编译器已经支持 C++0x。你是开始使用 C++0x 还是在等待 x 的定义?我必须对我的代码进行一些重构;我应该开始使用新功能吗?

0 投票
5 回答
9452 浏览

c++ - unique_ptr - 重大改进?

在实际的 C++ 标准中,创建满足以下规则的集合即使不是不可能也很难:

  1. 异常安全,
  2. 廉价的内部操作(在实际的 STL 容器中:操作是副本),
  3. 自动内存管理。

为了满足 (1),集合不能存储原始指针。为了满足 (2),集合必须存储原始指针。为了满足 (3),集合必须按值存储对象。

结论:三项相互冲突。

使用 s时不会满足第 (2) 项,shared_ptr因为当集合需要移动元素时,它需要进行两次调用:构造函数和析构函数。不可能进行大规模memcpy()的复制/移动操作。

我是否正确,所描述的问题将由unique_ptrand解决std::move()?使用这些工具的集合将能够满足所有 3 个条件:

  1. 当一个集合作为异常的副作用而被删除时,它将调用unique_ptr' 析构函数。没有内存泄漏。
    • unique_ptr参考计数器不需要任何额外空间;因此它的主体应该与包装指针的大小完全相同,
    • 我不确定,但看起来这允许unique_ptrs通过使用memmove()类似操作()来移动组,
    • 即使不可能,std::move()操作员也将允许移动每个unique_ptr对象,而无需调用构造函数/析构函数对。
  2. unique_ptr将拥有给定内存的独占所有权。不会发生意外的内存泄漏。

这是真的?使用的其他优点是unique_ptr什么?

0 投票
4 回答
2672 浏览

c++ - C++ 类通用字符串常量

在 C++ 中,我想定义一些将在类中使用的字符串,但这些值将在所有实例中通用。在 CI 中会使用#defines。这是一个尝试:

如果需要 C++0x,这是可以接受的。

0 投票
4 回答
2054 浏览

c++ - C++0x 性能改进

允许编写更高效的 C++ 代码的 C++0x 改进之一是 unique_ptr 智能指针(太糟糕了,它不允许通过 memmove() 之类的操作移动:该提案未纳入草案)。

即将发布的标准中还有哪些其他性能改进?以下面的代码为例:

该代码将连接向量v中包含的所有字符串。这段简洁的代码的问题在于,accumulate() 复制了周围的东西,并且不使用引用。并且 string() 每次调用 plus 运算符时都会重新分配。因此,与优化良好的类比 C 代码相比,该代码的性能较差。

C++0x 是否提供了解决问题的工具,也许还有其他工具?

0 投票
9 回答
9986 浏览

c++ - 对即将推出的 C++0x 的编译器支持

是否有对新 C++0x 有良好支持的编译器?

我使用 GCC,但不幸的是当前版本 4.4 对新功能的支持很差。