Questions tagged «c++»

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

6
在循环内部声明变量,是好的做法还是坏的做法?
问题1:在循环内声明变量是一种好习惯还是不好的做法? 我已经阅读了其他有关是否存在性能问题(大多数人说没有)的主题,并且应该始终将变量声明为接近将要使用的变量。我想知道的是,是否应该避免这种情况,或者实际上是否应该这样做。 例: for(int counter = 0; counter <= 10; counter++) { string someString = "testing"; cout << someString; } 问题2:大多数编译器是否意识到该变量已经被声明并且仅跳过了该部分,还是实际上每次都在内存中为其创建了一个位置?

17
转发声明C ++中的枚举
我正在尝试执行以下操作: enum E; void Foo(E e); enum E {A, B, C}; 编译器拒绝。我对Google进行了快速浏览,共识似乎是“您无法做到”,但我不明白为什么。谁能解释? 澄清2:之所以这样做,是因为我在使用所述枚举的类中有私有方法,并且我不希望公开枚举的值-因此,例如,我不希望任何人知道E定义为 enum E { FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X } 因为X项目不是我希望用户知道的东西。 因此,我想转发声明该枚举,以便将私有方法放在头文件中,在cpp内部声明该枚举,然后将构建的库文件和头分发给其他人。 至于编译器-它是GCC。
263 c++  enums 

13
如何在C ++中创建静态类?
如何在C ++中创建静态类?我应该能够做类似的事情: cout << "bit 5 is " << BitParser::getBitAt(buffer, 5) << endl; 假设我创建了BitParser该类。会是什么BitParser类的定义是什么样子?
263 c++  oop  class  syntax  static 

28
如何向C ++应用程序添加反射?
我希望能够对C ++类的名称,内容(即成员及其类型)等进行自省。我在这里说的是本机C ++,而不是具有反射的托管C ++。我意识到C ++使用RTTI提供了一些有限的信息。哪些其他库(或其他技术)可以提供此信息?

4
std :: string length()和size()成员函数
我正在阅读此问题的答案,发现实际上有一个方法被要求length()使用std::string(我一直使用size())。在std::string课堂上使用此方法是否有任何特定原因?我同时阅读了MSDN和CppRefernce,它们似乎表明size()和之间没有区别length()。如果是这样,这是否会使该类的用户感到困惑?
263 c++  string  stl  size 

10
C / C ++中整数除法的快速上限
给定整数值x和y,C和C ++都将商返回q = x/y浮点等效项的下限。我对返回上限的方法感兴趣。例如ceil(10/5)=2和ceil(11/5)=3。 显而易见的方法包括: q = x / y; if (q * y < x) ++q; 这需要额外的比较和乘法。我见过的(实际上使用过的)其他方法都涉及将as float或as强制转换double。有没有更直接的方法来避免额外的乘法(或第二除法)和分支,并且还避免将其转换为浮点数?
262 c++  c  algorithm  math 

11
将char *转换为std :: string
我需要使用std::string来存储由检索的数据fgets()。为此,我需要将char*返回值从fgets()转换为std::string并存储在数组中。如何才能做到这一点?
262 c++  stdstring 



5
如何引发C ++异常
我对异常处理的理解很差(即,如何出于自身目的自定义throw,try,catch语句)。 例如,我定义了一个函数,如下所示: int compare(int a, int b){...} 我希望函数在a或b为负数时引发一些消息异常。 在函数的定义中应该如何处理?

21
如何使用C ++发出HTTP请求?
有什么方法可以使用C ++轻松发出HTTP请求吗?具体来说,我想下载页面(API)的内容并检查内容是否包含1或0。是否还可以将内容下载为字符串?
258 c++  httprequest 


7
Vim中的自动补全
简而言之,我正在寻找Vim编辑器可以正常工作的自动完成功能。我之前曾争论过,Vim完全替代了Linux下的IDE,尽管这确实是正确的,但它缺少一个重要功能:自动完成。 我了解Ctrl+ N,丰富的Ctags集成,Taglist,cppcomplete和OmniCppComplete。las,这些都不符合我对“自动完成工作”的描述: Ctrl+N(仅当您忘记了如何拼写class或时,才能很好地工作)while。那好吧。 Ctags给您起了基础,但有很多缺点。 Taglist只是一个Ctags包装器,因此继承了它的大多数缺点(尽管它对于列表声明非常有效)。 cppcomplete根本无法按承诺工作,并且我无法弄清楚我做错了什么,或者它是否在“正常工作”并且限制是设计使然。 OmniCppComplete似乎与cppcomplete具有相同的问题,即自动完成无法正常工作。此外,该tags文件再次需要手动更新。 我知道这样一个事实,甚至没有完善的现代IDE也不能提供良好的C ++代码完成功能。这就是为什么到目前为止,我已经接受Vim在这一领域的不足。但是我认为基本的代码完成水平要求不高,实际上是生产使用所必需的。所以我正在寻找至少可以完成以下任务的东西。 语法意识。cppcomplete承诺(但对我而言不兑现)以下内容的正确,作用域自动完成: variableName.abc variableName->abc typeName::abc 实际上,其他任何东西都完全没有用。 可配置性。我需要(轻松地)指定源文件的位置,并因此指定脚本从何处获取其自动完成信息。实际上,我的目录中有一个Makefile,它指定所需的包含路径。Eclipse可以解释其中的信息,为什么还没有Vim脚本? 最新。更改文件中的内容后,我希望自动完成功能能够反映这一点。我不想要手动触发ctags(或一些类似)。另外,更改应该是增量的,即当我只更改一个文件时,重新解析整个目录树(可能很大)是完全不可接受的ctags。 我忘记了什么吗?随时更新。 我对大量的配置和/或修改很满意,但是我不想从头开始编写解决方案,而且我也不擅长调试Vim脚本。 最后一点,我真的很喜欢Java和C#的相似之处,但我想这太令人希望了:ctags仅解析代码文件,Java和C#都具有庞大的预编译框架,需要对其进行索引。不幸的是,在没有IDE的情况下开发.NET甚至比C ++更像是PITA。
257 c++  vim  ide  autocomplete 

16
从析构函数中抛出异常
大多数人说,永远不要从析构函数中抛出异常-这样做会导致未定义的行为。Stroustrup指出:“向量析构函数显式地为每个元素调用析构函数。这意味着,如果抛出一个元素析构函数,则向量破坏会失败...实际上,没有很好的方法来防止从析构函数引发的异常,因此该库不保证元素析构函数抛出异常”(来自附录E3.2)。 本文似乎另有说法-抛出析构函数或多或少是可以的。 所以我的问题是-如果从析构函数中抛出导致未定义的行为,那么如何处理析构函数期间发生的错误? 如果在清理操作期间发生错误,您是否会忽略它?如果是可以在堆栈中潜在地处理但在析构函数中无法正确处理的错误,那么将异常抛出到析构函数之外是否有意义? 显然,这类错误很少见,但可能出现。

10
在默认情况下,为什么C ++ 11的lambda要求“ mutable”关键字进行按值捕获?
简短示例: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } 问题:为什么我们需要mutable关键字?与传递给命名函数的传统参数完全不同。背后的原理是什么? 我给人的印象是,按值捕获的全部目的是允许用户更改临时值-否则,使用按引用捕获几乎总是更好,不是吗? 有什么启示吗? (顺便说一下,我正在使用MSVC2010。AFAIK,这应该是标准的)
256 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.