Questions tagged «c++»

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

14
C ++中不必要的花括号?
今天在为一位同事进行代码审查时,我看到了一件奇怪的事情。他用大括号将新代码括起来,如下所示: Constructor::Constructor() { existing code { New code: do some new fancy stuff here } existing code } 这样做的结果是什么?这样做的原因可能是什么?这个习惯从哪里来? 编辑: 基于输入和下面的一些问题,即使我已经标记了答案,我仍必须在问题中添加一些内容。 该环境是嵌入式设备。有很多用C ++语言编写的遗留C代码。有很多C语言转换的C ++开发人员。 在代码的这一部分中没有关键部分。我仅在代码的这一部分中看到过它。没有完成主要的内存分配,仅设置了一些标志,并且有些混乱。 用花括号括起来的代码是这样的: { bool isInit; (void)isStillInInitMode(&isInit); if (isInit) { return isInit; } } (不用管代码,只需要紧握大括号...;)在大括号之后,还有更多的旋转,状态检查和基本的信号传递。 我和那个家伙谈过,他的动机是限制变量的范围,命名冲突以及其他一些我无法真正理解的东西。 从我的观点来看,这似乎很奇怪,我不认为花括号应该在我们的代码中。我在所有答案中都看到了一些很好的示例,说明了为什么可以用花括号将代码括起来,但是您是否不应该将代码分成方法呢?

14
STL或Qt容器?
使用Qt容器的优点和缺点(QMap,QVector在他们的STL等价物,等等)? 我可以看到一个偏爱Qt的原因: Qt容器可以传递到Qt的其他部分。例如,可以使用它们先填充a QVariant,然后填充a QSettings(尽管有一定限制,但仅接受QList和QMap/且QHash其键为字符串)。 还有其他吗? 编辑:假设应用程序已经依赖Qt。
185 c++  qt  stl 

4
std :: auto_ptr到std :: unique_ptr
随着新标准的到来(以及某些编译器中已有的部件),新类型std::unique_ptr应被替换为std::auto_ptr。 它们的用法是否完全重叠(因此我可以在我的代码上进行全局查找/替换(不是我可以这样做,但是如果可以的话))还是应该注意阅读文档后看不到的一些区别? 另外,如果它是直接替代品,为什么给它起一个新的名字而不是仅仅改善它std::auto_ptr?

1
如何引导GCC和g ++?
这一直困扰着我一段时间。GCC和g ++如何自行编译? 我猜每个修订都使用以前构建的修订进行编译。这是真的?如果是的话,是否意味着最旧的g ++和GCC版本是用汇编编写的?

7
我的工具箱中应该包含哪些现代C ++库?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使它成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我已经退出C ++游戏已有10年了,我想重新开始使用商业应用程序。这些天正在使用哪些库? 用户界面(例如wxWidgets,Qt) 数据库 通用(例如Boost,Loki,STL) 穿线 测试中 网络/插座 我希望能够跨平台兼容(尽可能开箱即用)。 您要依赖哪些库?它们提供哪些功能使它们“必不可少”? 请参阅我的回答下面的摘要。
185 c++ 

4
不能在双打上使用模数吗?
我有一个C ++程序(使用g ++编译)。我试图将两个双精度数作为操作数应用于模数函数,但出现以下错误: 错误:类型为“ double”和“ double”的无效操作数为二进制“ operator%” 这是代码: int main() { double x = 6.3; double y = 2; double z = x % y; }
185 c++  modulo 


12
mmap()与阅读块
我正在开发一个程序,该程序将处理大小可能为100GB或更大的文件。这些文件包含可变长度记录集。我已经启动并运行了第一个实现,现在正寻求提高性能,尤其是由于输入文件被扫描了多次,因此更有效地执行I / O。 是否有mmap()通过C ++ fstream库读取和使用块的经验法则?我想做的是从磁盘将大块读取到缓冲区中,从缓冲区中处理完整的记录,然后再读取更多内容。 该mmap()代码可能会得到非常混乱,因为mmap“d块需要躺在页大小的边界(我的理解)和记录可能潜在般划过页面边界。使用fstreams时,由于我们不限于读取位于页面大小边界上的块,因此我只能寻求记录的开头并再次开始读取。 我如何在这两个选项之间做出选择,而无需先实际编写完整的实现?有任何经验法则(例如mmap()快2倍)还是简单测试?
184 c++  file-io  fstream  mmap 


10
在哪种情况下我应该使用特定的STL容器?
在C ++的书中,我一直在阅读STL容器,特别是有关STL及其容器的部分。现在,我确实了解它们中的每一个都有它们自己的特定属性,并且我几乎要记住它们的所有属性……但是我还不了解的是,在每种情况下都使用它们。 有什么解释?首选示例代码。


6
对静态constexpr char []的未定义引用
我想static const char在班上有一个数组。GCC抱怨并告诉我应该使用constexpr,尽管现在它告诉我这是未定义的参考。如果我将数组设为非成员,则它将进行编译。到底是怎么回事? // .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; }; // .cpp void foo::bar() { std::string str(baz); // undefined reference to baz }

5
通过引用传递数组
如何通过引用传递静态分配的数组? void foo(int (&myArray)[100]) { } int main() { int a[100]; foo(a); } 是否(&myArray)[100]有任何含义或其只是通过引用传递任何数组的语法?我不明白在这里用大括号将其括起来。谢谢。
184 c++  arrays 

15
如何在C ++中将整个文件读入std :: string?
如何将文件读入std::string,即一次读取整个文件? 文本或二进制模式应由调用方指定。该解决方案应符合标准,可移植且高效。它不应不必要地复制字符串的数据,并且应避免在读取字符串时重新分配内存。 这样做将是STAT的文件大小,单向调整std::string和fread()进入std::string的const_cast<char*>()'编辑data()。这就要求std::string的数据是连续的,这不是标准所要求的,但是对于所有已知的实现来说都是如此。更糟糕的是,如果以文本模式读取文件,则文件std::string的大小可能不等于文件的大小。 一个完全正确的,符合标准的和便携式解决方案可以使用以下构建std::ifstream的rdbuf()进入std::ostringstream,并从那里进入std::string。但是,这可能会复制字符串数据和/或不必要地重新分配内存。 所有相关的标准库实现是否足够聪明,可以避免所有不必要的开销? 还有另一种方法吗? 我是否错过了一些已经提供所需功能的隐藏Boost功能? void slurp(std::string& data, bool is_binary)
184 c++  string  file-io 


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.