Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。

8
缩小C ++ 0x中的转换。仅仅是我,还是听起来像是一个巨大的变化?
C ++ 0x将使下面的代码和类似的代码格式错误,因为它需要a到a的所谓缩小转换。doubleint int a[] = { 1.0 }; 我想知道在现实世界的代码中是否经常使用这种初始化。此更改将破坏多少代码?如果您的代码受到影响,是否需要花费很多精力在代码中进行修复? 供参考,请参阅n3225的8.5.4 / 6 缩小转换是隐式转换 从浮点类型到整数类型,或者 从long double到double或float,或者从double到float,除非源是一个常量表达式,并且转换后的实际值在可以表示的值范围内(即使不能准确表示),或者 从整数类型或非作用域枚举类型到浮点类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在转换回原始类型时会产生原始值,或者 从整数类型或无作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在出现以下情况时产生原始值转换回原始类型。

6
如何检查std :: thread是否仍在运行?
如何检查astd::thread是否仍在运行(以独立于平台的方式)?它缺少一种timed_join()方法,joinable()并不意味着要这样做。 我曾考虑过std::lock_guard在线程中使用a锁定互斥锁,并使用try_lock()互斥锁的方法来确定它是否仍处于锁定状态(线程正在运行),但是这对我来说似乎不必要。 您知道更优雅的方法吗? 更新:要明确:我想检查线程是否干净退出。为此,一个“挂起”线程被认为正在运行。


5
枚举vs强类型枚举
我是C ++编程的初学者。 今天,我遇到了一个新主题:强类型enum。我已经研究了一下,但是到现在为止我仍无法找出为什么我们需要它,以及它的用途是什么? 例如,如果我们有: enum xyz{a, b, c}; /*a = 0, b = 1, c = 2, (Typical C format)*/ 我们为什么需要写: enum class xyz{a, b, c}; 我们要在这里做什么?我最重要的疑问是如何使用它。您能否提供一个小例子,这会让我理解。
84 c++  c++11  enums 

1
具有指定模板参数的C ++ 11 make_pair无法编译
我只是在启用-std = c ++ 11的情况下玩g ++ 4.7(后面的快照之一)。我试图编译一些现有的代码库,而一个失败的案例使我有些困惑。 如果有人可以解释发生了什么,我将不胜感激。 这是代码: #include <utility> #include <iostream> #include <vector> #include <string> int main ( ) { std::string s = "abc"; // 1 ok std::pair < std::string, int > a = std::make_pair ( s, 7 ); // 2 error on the next line std::pair < …

11
如何在C ++ 11中获取整数线程ID
c ++ 11可能会获取当前的线程ID,但是它不能转换为整数类型: cout<<std::this_thread::get_id()<<endl; 输出:139918771783456 cout<<(uint64_t)std::this_thread::get_id()<<endl; 错误:从类型'std :: thread :: id'强制转换为类型'uint64_t'与其他类型相同:从类型'std :: thread :: id'强制转换类型为'uint32_t' 我真的不想做指针转换以获得整数线程ID。有某种合理的方法(因为我希望它是便携式的,所以是标准的)吗?

3
重用已移动的容器?
重用已移动容器的正确方法是什么? std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2); 根据我在C ++ 0x标准草案中所读的内容;ver3似乎是正确的方法,因为移动后的对象位于 “除非另有规定,否则将这些移出的对象置于有效但未指定的状态。” 我从未发现过任何“以其他方式指定”的实例。 虽然我发现ver3有点round回,并且会更喜欢ver1,但是vec3可以允许进行其他一些优化,但另一方面很容易导致错误。 我的假设正确吗?

1
C ++ 11中字符串文字的Unicode编码
提出一个相关问题之后,我想问一下C ++ 11中新的字符和字符串文字类型。看来我们现在有四种字符和五种字符串文字。字符类型: char a = '\x30'; // character, no semantics wchar_t b = L'\xFFEF'; // wide character, no semantics char16_t c = u'\u00F6'; // 16-bit, assumed UTF16? char32_t d = U'\U0010FFFF'; // 32-bit, assumed UCS-4 和字符串文字: char A[] = "Hello\x0A"; // byte string, "narrow encoding" wchar_t B[] = L"Hell\xF6\x0A"; …

9
如何使用仅使用其中一个向量的条件以相同方式对两个向量进行排序?
如何使用仅使用其中一个向量的条件以相同方式对两个向量进行排序? 例如,假设我有两个大小相同的向量: vector<MyObject> vectorA; vector<int> vectorB; 然后,我vectorA使用一些比较功能进行排序。排序重新排序vectorA。如何将相同的重新排序应用于vectorB? 一种选择是创建一个结构: struct ExampleStruct { MyObject mo; int i; }; 然后排序包含的内容的矢量vectorA和vectorB压缩成单个载体: // vectorC[i] is vectorA[i] and vectorB[i] combined vector<ExampleStruct> vectorC; 这似乎不是理想的解决方案。还有其他选择,尤其是在C ++ 11中吗?
84 c++  c++11 


5
std :: array vs数组性能
如果我想建立一个非常简单的数组 int myArray[3] = {1,2,3}; 我应该std::array改用吗? std::array<int, 3> a = {{1, 2, 3}}; 与常规方法相比,使用std :: array有什么优势?表现更好吗?只是更易于处理以进行复制/访问?
84 c++  c++11  stdarray 

4
如何传递std :: unique_ptr?
我正在尝试使用C ++ 11 unique_ptr;我正在替换我的一个项目中的多态原始指针,该项目属于一个类,但是经常通过。 我以前有类似的功能: bool func(BaseClass* ptr, int other_arg) { bool val; // plain ordinary function that does something... return val; } 但是我很快意识到我将无法切换到: bool func(std::unique_ptr<BaseClass> ptr, int other_arg); 因为调用者将不得不处理该函数的指针所有权,所以我不想这么做。那么,什么是解决我的问题的最佳方法? 我虽然将指针作为参考传递,像这样: bool func(const std::unique_ptr<BaseClass>& ptr, int other_arg); 但是我这样做很不自在,首先是因为传递已经输入_ptr为引用的东西似乎不是本能,这将是引用的引用。其次,因为功能签名变得更大。第三,因为在生成的代码中,需要两个连续的指针间接访问才能到达我的变量。
83 c++  c++11  unique-ptr 

6
if语句vs if-else语句,哪个更快?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 前几天,我和一个朋友争论了这两个片段。哪个更快,为什么? value = 5; if (condition) { value = 6; } 和: if (condition) { value = 6; } else { value = 5; } 如果value是矩阵怎么办? 注意:我知道它value = condition ? 6 : 5;存在,并且我希望它会更快,但这不是一个选择。 编辑(由于问题暂时搁置,因此被工作人员要求): 请通过考虑由主流编译器(例如g ++,clang ++,vc,mingw)以优化和非优化版本生成的x86程序集或MIPS程序集来回答。 当汇编不同时,请解释为什么版本更快以及何时发布(例如“更好,因为没有分支且分支不会出现问题”)

4
为什么新的随机库比std :: rand()好?
因此,我看到了一个名为rand()认为有害的演讲,该演讲提倡在简单std::rand()加模范范式上使用随机数生成的引擎分布范式。 但是,我想看看std::rand()第一手的失败,所以我做了一个快速实验: 基本上,我编写了2个函数getRandNum_Old(),分别getRandNum_New()使用std::rand()和std::mt19937+生成了一个介于0和5之间(含0和5)的随机数std::uniform_int_distribution。 然后,我使用“旧”方式生成了960,000(可被6整除)随机数,并记录了数字0-5的频率。然后,我计算了这些频率的标准偏差。我要寻找的是尽可能低的标准偏差,因为如果分布真正均匀,就会发生这种情况。 我对该模拟运行了1000次,并记录了每个模拟的标准偏差。我还记录了所花费的时间(以毫秒为单位)。 之后,我再次进行了完全相同的操作,但是这次以“新”方式生成随机数。 最后,我计算了旧方法和新方法的标准差列表的均值和标准差,以及新方法和旧方法的时间列表的均值和标准差。 结果如下: [OLD WAY] Spread mean: 346.554406 std dev: 110.318361 Time Taken (ms) mean: 6.662910 std dev: 0.366301 [NEW WAY] Spread mean: 350.346792 std dev: 110.449190 Time Taken (ms) mean: 28.053907 std dev: 0.654964 出人意料的是,两种方法的面包卷总撒布相同。即,std::mt19937+std::uniform_int_distribution不是简单std::rand()+的“统一” %。我所做的另一项观察是,新方法比旧方法慢大约4倍。总体而言,似乎我付出了巨大的速度代价,却几乎没有质量上的提高。 我的实验有某种缺陷吗?还是std::rand()真的不是那么糟糕,甚至更好? 作为参考,这是我完整使用的代码: #include <cstdio> #include <random> #include <algorithm> …
82 c++  c++11  random 

3
如何声明一个接受lambda的函数?
我在互联网上阅读了许多教程,这些教程解释了如何在标准库(例如std::find)中使用lambda ,它们都很有趣,但是我找不到任何可以解释如何将lambda用于自己的函数的教程。 例如: int main() { int test = 5; LambdaTest([&](int a) { test += a; }); return EXIT_SUCCESS; } 我该如何申报LambdaTest?它的第一个参数是什么类型?然后,如何调用传递给它的匿名函数-例如,以“ 10”作为参数?
82 c++  lambda  c++11 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.