Questions tagged «c++»

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


7
使用gdb检查标准容器(std :: map)内容
假设有这样的事情: #include <map> int main(){ std::map<int,int> m; m[1] = 2; m[2] = 4; return 0; } 我希望能够检查从gdb运行该程序的地图的内容。 如果尝试使用下标运算符,则会得到: (gdb) p m[1] Attempt to take address of value not located in memory. 使用find方法不会产生更好的结果: (gdb) p m.find(1) Cannot evaluate function -- may be inlined 有没有办法做到这一点?
93 c++  stl  map  gdb 

3
为什么显式删除构造函数?
什么时候/为什么要显式删除我的构造函数?假设原因是为了防止使用它,为什么不仅仅使用它private呢? class Foo { public: Foo() = delete; };
93 c++ 

5
如何在C ++中找到两个std :: set的交集?
我一直试图在C ++中找到两个std :: set之间的交集,但是我一直遇到错误。 我为此创建了一个小样本测试 #include <iostream> #include <vector> #include <algorithm> #include <set> using namespace std; int main() { set<int> s1; set<int> s2; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); s2.insert(1); s2.insert(6); s2.insert(3); s2.insert(0); set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end()); return 0; } 后面的程序不会产生任何输出,但是我希望有一个s3具有以下值的新集(我们称它为): s3 = [ 1 , 3 ] 相反,我得到了错误: test.cpp: In function ‘int main()’: test.cpp:19: …

14
如何为C ++程序添加定时延迟?
我试图在C ++程序中添加定时延迟,并且想知道是否有人对我可以尝试的内容或可以查看的信息有任何建议? 我希望我有更多有关如何实现此定时延迟的详细信息,但是在获得有关如何添加定时延迟的更多信息之前,我不确定甚至应如何尝试执行此操作。
93 c++  time 

8
高效的无符号到无符号转换避免实现定义的行为
我想定义一个函数,该函数接受unsigned intas作为参数,int并向该参数返回全模UINT_MAX + 1。 第一次尝试可能看起来像这样: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } 但是,正如任何语言律师所知,对于大于INT_MAX的值,从无符号转换为有符号是由实现定义的。 我要实现这一点,以便(a)仅依赖规范要求的行为;(b)它可以在任何现代机器和优化的编译器上编译为no-op。 至于奇异的机器...如果没有符号的int与未签名的int模UINT_MAX + 1一致,那么我想抛出一个异常。如果不止一个(我不确定这是可能的),那么我要最大的一个。 好,第二次尝试: int unsigned_to_signed(unsigned n) { int int_n = static_cast<int>(n); if (n == static_cast<unsigned>(int_n)) return int_n; // else do something long and complicated } 当我不使用典型的二进制补码系统时,我不太关心效率,因为我的拙见认为这不太可能。而且,如果我的代码成为2050年无处不在的符号幅度系统的瓶颈,那么我敢打赌,有人可以弄清楚这一点,然后对其进行优化。 现在,第二次尝试非常接近我想要的。尽管强制转换int为某些输入的实现定义,但是unsigned标准保证了强制转换为保留对UINT_MAX + 1取模的值。因此,条件条件确实会检查我想要的内容,并且在任何可能遇到的系统上,它都不会编译成任何东西。 但是...我仍然在int不首先检查它是否将调用实现定义的行为的情况下进行投射。在2050年的某个假设系统上,它可以做谁知道什么。所以说我要避免这种情况。 问题:我的“第三次尝试”应该是什么样的? 回顾一下,我想: 从unsigned int转换为signed int …

2
C ++结构的函数
通常我们可以为C ++结构定义一个变量,如 struct foo { int bar; }; 我们还可以为结构定义函数吗?我们将如何使用这些功能?
93 c++  function  struct 

4
将shared_ptr <Derived>作为shared_ptr <Base>传递
将shared_ptr派生类型的a传递给采用shared_ptr基本类型的a的函数的最佳方法是什么? 通常,我shared_ptr通过引用传递s以避免不必要的复制: int foo(const shared_ptr&lt;bar&gt;&amp; ptr); 但是如果我尝试做类似的事情这是行不通的 int foo(const shared_ptr&lt;Base&gt;&amp; ptr); ... shared_ptr&lt;Derived&gt; bar = make_shared&lt;Derived&gt;(); foo(bar); 我可以用 foo(dynamic_pointer_cast&lt;Base, Derived&gt;(bar)); 但这似乎不太理想,原因有两个: 一个dynamic_cast似乎有点过度了一个简单的衍生到基础施法。 据我了解,dynamic_pointer_cast创建指针的副本(尽管是临时的)以传递给函数。 有更好的解决方案吗? 后代更新: 原来是缺少头文件的问题。另外,我在这里尝试执行的操作也被视为反模式。通常, 不影响对象生命周期的函数(即对象在函数持续时间内保持有效)应采用简单的引用或指针,例如int foo(bar&amp; b)。 占用对象的函数(即给定对象的最终用户)应采用unique_ptr按值,例如int foo(unique_ptr&lt;bar&gt; b)。std::move调用者应将值放入函数中。 延长对象寿命的函数应采用shared_ptr按值,例如int foo(shared_ptr&lt;bar&gt; b)。避免循环引用的通常建议适用。 有关详细信息,请参见Herb Sutter的“基础知识”演讲。



4
给定位置,如何获取列表中的某个元素?
所以我有一个清单: list&lt;Object&gt; myList; myList.push_back(Object myObject); 我不确定,但是我有信心这将是数组中的“第0个”元素。我可以使用任何可以返回“ myObject”的函数吗? Object copy = myList.find_element(0); ?
92 c++  list  stl 

3
如何使用命令标志在将来的共享库上设置断点
我正在尝试使用该--command标志自动执行gdb会话。我正在尝试在共享库(相当于DLL的Unix)中的函数上设置断点。我的cmds.gdb看起来像这样: set args /home/shlomi/conf/bugs/kde/font-break.txt b IA__FcFontMatch r 但是,我得到以下信息: shlomi:〜/ progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ... GNU gdb 6.8-2mdv2009.0(Mandriva Linux版本2009.0) 版权所有(C)2008 Free Software Foundation,Inc. 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件:您可以自由更改和重新分发它。 在法律允许的范围内,没有任何担保。输入“显示复制” 和“显示保修”了解详情。 该GDB被配置为“ i586-mandriva-linux-gnu” ... (未找到调试符号) 未定义函数“ IA__FcFontMatch”。 使断点在将来共享库加载时挂起?(是或[n])[回答N;输入不是来自终端] 因此,它毕竟不会设置断点。如何将默认值设置为“ y”,以在未决的将来共享库加载时设置断点? 我记得自己有能力做些事情,但是却不记得自己做了什么。
92 c++  c  linux  unix  gdb 

9
(((a +(b&255))&255)与((a + b)&255)是否相同?
我在浏览一些C ++代码,发现了以下内容: (a + (b &amp; 255)) &amp; 255 双重AND惹恼了我,所以我想到了: (a + b) &amp; 255 (a和b是32位无符号整数) 我迅速编写了一个测试脚本(JS)来确认我的理论: for (var i = 0; i &lt; 100; i++) { var a = Math.ceil(Math.random() * 0xFFFF), b = Math.ceil(Math.random() * 0xFFFF); var expr1 = (a + (b &amp; 255)) &amp; 255, expr2 = …
92 c++  binary  logic 

13
适用于Windows的LLVM C ++ IDE
是否有一些适用于Windows的C / C ++ IDE ,就像现代Xcode一样,该IDE 与LLVM编译器(和Clang C / C ++分析器)集成在一起。 我有Dev-Cpp(它使用了过时的GCC)和Code :: Blocks(带有一些GCC)。但是GCC给了我非常神秘的错误信息。我想从Clang前端获得一些更加用户友好的错误消息。 是的,Clang不能与复杂的C ++代码一起使用,但是Clang干线已经可以编译LLVM本身。所以我想知道是否有任何LLVM IDE正在开发中或处于beta版本中。 是的,我可以将Clang用作具有GCC兼容IDE的其他编译器。但是,有没有与Clang 集成的 IDE ?Clang具有不同的输出格式,因此IDE必须对其进行解析。Clang可以提供源代码的IDE解析。Clang具有分析选项,IDE必须支持该选项。看一下,例如http://iosdevelopertips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html Clang最想要的功能是智能自动完成功能,因此IDE只能建议语法正确的变体,例如,仅列出此struct,class的字段。 结果:(与答案合并): 带有CDT&gt; = 8并带有https://code.google.com/archive/p/llvm4eclipsecdt/插件的Eclipse(来自Petri Tuononen)(没有自动完成功能) LLVM项目中的带vimrc的Vim(仅智能完成吗?)https://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/ 具有(仅智能完成功能的)Emacs https://llvm.org/svn/llvm-project/cfe/trunk/utils/clang-completion-mode.el Qt创建者:https : //blog.qt.io/blog/2011/10/19/qt-creator-and-clang/ CodeLite:http://www.codelite.org/LiteEditor/ClangIntegration35
92 c++  windows  ide  llvm  clang 

1
为什么libc ++的vector <bool> :: const_reference不是bool?
第23.3.7节vector&lt;bool&gt;[vector.bool] 类的第1段规定: template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... 但是,使用libc ++时,该程序无法编译: #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } 此外,我注意到C ++标准在此规范中一直到C ++ 98都是一致的。而且我还要指出,自从首次引入libc ++以来,libc ++一直未遵循此规范。 这种不符合的动机是什么?

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.