Questions tagged «c++»

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


3
刷新缓冲区是什么意思?
我正在学习C ++,但发现了一些我听不懂的东西: 可以显式刷新输出缓冲区以强制写入缓冲区。默认情况下,读取cin冲洗cout;cout当程序正常结束时,也会刷新。 因此,刷新缓冲区(例如输出缓冲区):是通过删除缓冲区中的所有内容来清除缓冲区还是通过输出缓冲区中的所有内容来清除缓冲区?还是刷新缓冲区意味着完全不同?
95 c++  input  buffer  output  flush 

5
我可以对仅移动类型的向量进行列表初始化吗?
如果我通过GCC 4.7快照传递以下代码,它将尝试将unique_ptrs 复制到向量中。 #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } 显然,这std::unique_ptr是不可操作的,因为不可复制: 错误:使用删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr(const std :: unique_ptr <_Tp,_Dp>&)[with _Tp = int; _Dp = std :: default_delete; std :: unique_ptr <_Tp,_Dp> = std :: unique_ptr]' GCC在尝试从初始化列表中复制指针时是否正确?

5
虚拟继承如何解决“钻石”(多重继承)的歧义?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } 我了解钻石的问题,并且上面的代码没有这个问题。 …


6
C中的代字号运算符
我已经看到了ELF哈希算法中使用的波浪号运算符,并且很好奇它的作用。(代码来自“永恒困惑”。) unsigned elf_hash ( void *key, int len ) { unsigned char *p = key; unsigned h = 0, g; int i; for ( i = 0; i < len; i++ ) { h = ( h << 4 ) + p[i]; g = h & 0xf0000000L; if ( g …
95 c++  c  operators 

9
编译错误:“ g ++:尝试执行'cc1plus'错误:execvp:没有这样的文件或目录”
当我使用popenin 编译C / C ++程序时,php出现此错误: g++: error trying to exec 'cc1plus': execvp: No such file or directory 但是,如果我在外壳中运行php代码,则工作正常。 在Arch Linux中 PHP代码: <?php function rfile($fp) { $out=""; while (!feof($fp)) { $out.= fgets($fp, 1024000); } return $out; } $p = popen('g++ -Wall -g aplusb.cc -o aplusb 2>&1', 'r'); $result = rfile($p); pclose($p); …
95 php  c++  c  linux  gcc 

3
什么是“记忆重击”?
我刚发现这篇博客文章提到“踩踏内存”: 一个很容易踩内存的C ++程序(如果您出生在托管代码世界中,您可能甚至从未听说过。) 实际上,我从未听说过! 那么,这是什么呢?什么时候发生?

27
程序仅在发布版本时崩溃-如何调试?
我这里遇到的是“薛定inger之猫”类型的问题-我的程序(实际上是我程序的测试套件,但仍然是一个程序)崩溃了,但仅在以发布模式构建时才出现,并且仅在从命令行启动时才崩溃。通过穴居人调试(即到处都是讨厌的printf()消息),我确定了代码崩溃的测试方法,尽管不幸的是,实际的崩溃似乎发生在某些析构函数中,因为我看到的最后一条跟踪消息在其他执行干净的析构函数。 当我尝试在Visual Studio中运行该程序时,它不会崩溃。从WinDbg.exe启动时也是如此。仅在从命令行启动时才发生崩溃。顺便说一句,这是在Windows Vista下发生的,不幸的是,我现在无法使用XP计算机进行测试。 这将是非常好的,如果我能得到的Windows打印出堆栈跟踪,或一些其他不是简单地结束,如果它已经退出干净方案。关于我如何在此处获取一些更有意义的信息并希望修复此错误,是否有人有任何建议? 编辑:问题确实是由越界数组引起的,我将在本文中对此进行更多描述。感谢大家为发现此问题所提供的帮助!
95 c++  debugging 

3
如何正确检查std :: function在C ++ 11中是否为空?
我想知道如何正确检查an std::function是否为空。考虑以下示例: class Test { std::function<void(int a)> eventFunc; void registerEvent(std::function<void(int a)> e) { eventFunc = e; } void doSomething() { ... eventFunc(42); } }; 这段代码在MSVC中可以很好地编译,但是如果我doSomething()不初始化就调用eventFunc该代码,则显然会崩溃。这是预期的,但我想知道的价值是eventFunc什么?调试器说'empty'。所以我用简单的if语句解决了这个问题: void doSomething() { ... if (eventFunc) { eventFunc(42); } } 这有效,但我仍然想知道未初始化的值是std::function什么?我想写,if (eventFunc != nullptr)但是std::function(显然)不是指针。 为什么纯如果有效?它背后的魔力是什么?而且,这是检查方法的正确方法吗?

8
vector :: at与vector :: operator []
我知道这at()比[]它的边界检查要慢,因为边界检查也有类似的问题,例如C ++ Vector at / []运算符速度 或:: std :: vector :: at()vs :: [] <<令人惊讶的结果!慢/快5到10倍!。我只是不明白该at()方法有什么用。 如果我有一个像这样的简单向量:std::vector<int> v(10);并且我决定通过使用at()而不是[]在有索引的情况下使用in 来访问其元素,i并且不确定其是否在向量范围内,它将迫使我用try-catch包装它块: try { v.at(i) = 2; } catch (std::out_of_range& oor) { ... } 尽管我可以自己使用size()和检查索引来获得相同的行为,但对我来说似乎更容易也很方便: if (i < v.size()) v[i] = 2; 所以我的问题是:与vector :: operator [] 相比,使用vector :: at有什么优点? 什么时候应该使用vector :: at而不是vector :: size …
95 c++  stl  stdvector 

1
C ++中“自由功能”一词的含义是什么?
在阅读boost :: test文档时,我遇到了“自由功能”一词。我了解的是,自由函数是任何不返回任何东西的函数(其返回类型为void)。但是在进一步阅读之后,自由函数似乎也没有接受任何参数。但是我不确定。这些都是我的假设。那么有人可以定义自由功能吗?
95 c++ 

4
我应为`size_t`包括哪个标题?
根据cppreference.com size_t在几个头中定义,即 <cstddef> <cstdio> <cstring> <ctime> 而且,自C ++ 11起, <cstdlib> <cwchar> 首先,我想知道为什么会这样。这不违背DRY原则吗?但是,我的问题是: 我应使用上述标题中的哪一个size_t?有关系吗?
95 c++  typedef 

4
如何检查模板参数的类型?
假设我有一个模板函数和两个类 class animal { } class person { } template<class T> void foo() { if (T is animal) { kill(); } } 我该如何检查T是动物?我不想在运行时进行检查。谢谢
95 c++  templates 

4
如何声明std :: unique_ptr,它的用途是什么?
我尝试了解其std::unique_ptr工作原理,并为此找到了本文档。作者从以下示例开始: #include <utility> //declarations of unique_ptr using std::unique_ptr; // default construction unique_ptr<int> up; //creates an empty object // initialize with an argument unique_ptr<int> uptr (new int(3)); double *pd= new double; unique_ptr<double> uptr2 (pd); // overloaded * and -> *uptr2 = 23.5; unique_ptr<std::string> ups (new std::string("hello")); int len=ups->size(); 让我感到困惑的是 unique_ptr<int> uptr …
95 c++  pointers  std  unique-ptr 

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.