Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

12
使用值对std :: map进行排序
我需要std::map按值而不是按键排序。有一个简单的方法吗? 我从下面的线程中得到了一个解决方案: std :: map按数据排序? 有更好的解决方案吗? map<long, double> testMap; // some code to generate the values in the map. sort(testMap.begin(), testMap.end()); // is there any function like this to sort the map?
71 c++  dictionary  std 

6
为什么拷贝分配运算符必须返回引用/常量引用?
在C ++中,从复制赋值运算符返回引用的概念对我来说还不清楚。为什么复制分配运算符不能返回新对象的副本?另外,如果我有classA和以下内容: A a1(param); A a2 = a1; A a3; a3 = a2; //<--- this is the problematic line 的operator=定义如下: A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }

8
匿名枚举的用法
匿名enum声明的目的是什么,例如: enum { color = 1 }; 为什么不只是声明int color = 1?
71 c++  enums 

7
使用C ++获取Unix时间戳
如何uint在C ++中获得Unix时间戳?我已经用Google搜索了一下,似乎大多数方法都在寻找更复杂的方法来表示时间。我不能只是把它当作uint?
71 c++  unix  timestamp  uint 

2
为什么使用三元运算符返回字符串与返回等效的if / else块会产生截然不同的代码?
我在使用Compiler Explorer时,偶然发现使用三元运算符时会发生以下有趣的行为: std::string get_string(bool b) { return b ? "Hello" : "Stack-overflow"; } 编译器为此生成的代码(带有-O3的Clang干线)是这样的: get_string[abi:cxx11](bool): # @get_string[abi:cxx11](bool) push r15 push r14 push rbx mov rbx, rdi mov ecx, offset .L.str mov eax, offset .L.str.1 test esi, esi cmovne rax, rcx add rdi, 16 #< Why is the compiler storing the …

6
如何在不使用<mutex>的情况下在C ++ 11中实现多线程安全单例
既然C ++ 11具有多线程功能,我想知道在不使用互斥对象的情况下实现延迟初始化单例的正确方法是什么(出于性能原因)。我想到了这一点,但是tbh Im并不太擅长编写无锁代码,因此Im正在寻找更好的解决方案。 // ConsoleApplication1.cpp : Defines the entry point for the console application. // # include &lt;atomic&gt; # include &lt;thread&gt; # include &lt;string&gt; # include &lt;iostream&gt; using namespace std; class Singleton { public: Singleton() { } static bool isInitialized() { return (flag==2); } static bool initizalize(const string&amp; name_) …

5
如何避免预编译头
我正在尝试用C ++编译一个简单的VS程序作为类的分配。我们只包含,&lt;iostream&gt;而我不断收到此错误: 1&gt; Assignment.cpp(15):致命错误C1010:寻找预编译头时文件意外结束。您是否忘记添加'#include "StdAfx.h"'到源中? 我的程序实际上很小... #include &lt;iostream&gt; using namespace std; int main() { unsigned int day = 30; cout &lt;&lt; "My Name is John Doe" &lt;&lt; endl; cout &lt;&lt; "My Major is CS" &lt;&lt; endl; cout &lt;&lt; "I was born on day " &lt;&lt; day &lt;&lt; endl; return 0; …

3
GCC 4.8中C ++ 11 thread_local变量的性能损失是多少?
从GCC 4.8变更日志草案中: G ++现在实现了C ++ 11 thread_local关键字;这与GNU__thread关键字的主要区别在于它允许动态初始化和销毁​​语义。不幸的是,此支持要求引用非函数局部thread_local变量,即使它们不需要动态初始化也需要运行时惩罚 ,因此用户可能希望继续使用__thread具有静态初始化语义的TLS变量。 这种运行时惩罚的本质和来源到底是什么? 显然,要支持非函数局部thread_local变量,在进入每个线程主线程之前都需要一个线程初始化阶段(就像全局变量有一个静态初始化阶段一样),但是它们是否指的是超出此范围的运行时代价? ? 粗略地说,gcc的thread_local新实现的体系结构是什么?

7
C ++ std :: set更新很乏味:我无法就地更改元素
我发现std::set乏味的更新操作是因为cppreference上没有这样的API 。所以我目前正在做的事情是这样的: //find element in set by iterator Element copy = *iterator; ... // update member value on copy, varies Set.erase(iterator); Set.insert(copy); 基本上,迭代器return bySet是a const_iterator,您不能直接更改其值。 有一个更好的方法吗?或者,也许我应该std::set通过创建自己的方法来覆盖(我不知道它是如何工作的。)
71 c++  stl  set 


2
C ++ 17中新的基于范围的for循环如何帮助Ranges TS?
该委员会将基于范围的for循环从: C ++ 11: { auto &amp;&amp; __range = range_expression ; for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) { range_declaration = *__begin; loop_statement } } 到C ++ 17: { auto &amp;&amp; __range = range_expression ; auto __begin = begin_expr ; auto __end = end_expr ; …
71 c++  c++11  for-loop  c++17 


8
使用浮点数快两倍吗?
双精度值存储更高的精度,并且是浮点数的两倍,但是Intel CPU是否针对浮点数进行了优化? 也就是说,对于+,-,*和/,双精度运算是否与浮点运算一样快或更快? 对于64位体系结构,答案是否会改变?

3
派生对基类成员数据的模板类访问
这个问题是一个在问的赞助这个线程。 使用以下类定义: template &lt;class T&gt; class Foo { public: Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg) { /* do something for foo */ } T Foo_T; // either a TypeA or a TypeB - TBD foo_arg_t _foo_arg; }; template &lt;class T&gt; class Bar : public Foo&lt;T&gt; { public: Bar (const foo_arg_t …

6
为什么大多数STL实现中的代码如此复杂?
STL是C ++世界的重要组成部分,大多数实现源自Stepanov和Musser的初步努力。 我的问题是代码的关键性,它是人们出于敬畏和学习目的而查看编写良好的C ++示例的主要来源之一:为什么STL的各种实现如此令人讨厌地看待-令人费解的和从美学的角度讲,通常是很好的例子,说明如何不编写C ++代码。 下面的代码示例由于在变量命名,布局,宏以及使用运算符等方面的原因而无法在我工作过的地方通过代码审查,这些操作不仅仅需要一目了然才能弄清实际情况。 template&lt;class _BidIt&gt; inline bool _Next_permutation(_BidIt _First, _BidIt _Last) { // permute and test for pure ascending, using operator&lt; _BidIt _Next = _Last; if (_First == _Last || _First == --_Next) return (false); for (; ; ) { // find rightmost element smaller than successor …
71 c++  stl  readability 

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.