Questions tagged «c++»

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

30
您经常关注的C ++博客?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心寻求指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 您关注的所有C ++博客是什么? 请为一个帖子添加一个网址。
183 c++  blogs 


22
内联汇编语言是否比本机C ++代码慢?
我试图比较内联汇编语言和C ++代码的性能,所以我写了一个函数,将两个大小为2000的数组相加100000次。这是代码: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j < length; j++) x[j] += y[j]; } } void calcuAsm(int *x,int *y,int lengthOfArray) { __asm { mov edi,TIMES start: mov esi,0 mov ecx,lengthOfArray label: mov …
183 c++  c  performance  assembly 

9
在C ++中声明枚举时,为什么要使用typedef?
多年以来我都没有写过任何C ++,现在我正尝试重新使用它。然后,我遇到了这个问题,并考虑放弃: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; 这是什么?为什么在typedef这里使用关键字?为什么名称TokenType在此声明中出现两次?语义与此有何不同: enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };
183 c++  enums  typedef 

2
为什么“ this”是指针而不是引用?
我在阅读有关C ++优缺点的问题的答案,并在阅读注释时遇到了疑问。 程序员经常发现“ this”是一个指针而不是一个引用令人困惑。另一个困惑是为什么“ hello”不是std :: string类型,而是求值为char const *(指针)(在数组到指针的转换之后)– Johannes Schaub-litb 08年12月22日在1:56 这仅表明它没有使用与其他(后来的)语言相同的约定。– le dorfier 08年12月22日在3:35 我将“这个”事情称为一个非常琐碎的问题。糟糕,感谢您在我的未定义行为示例中发现了一些错误。:)尽管我不了解有关尺寸的信息与第一个信息有关。完全不允许指针指向已分配的内存之外– jalf 08年12月22日在4:18 这是持续不断的痛苦吗?– yesraaj 08年12月22日下午6:35 如果方法是const int getFoo()const,则它可以是常量。<-在getFoo的范围内,“ this”是常量,因此是只读的。这样可以防止错误,并为调用者提供一定程度的保证,即该对象不会更改。– Doug T. 08年12月22日在16:42 您不能重新分配“此”。即您不能执行“ this =&other;”,因为这是一个右值。但这是T *类型,而不是T const类型。即它是一个非恒定指针。如果您使用的是const方法,则它是指向const的指针。T常量 但指针本身是非常量– Johannes Schaub-litb 08年12月22日在17:53 可以这样想“ this”:#define this(this_ + 0),其中编译器创建“ this_”作为指向对象的指针,并使“ this”成为关键字。您不能分配“ this”,因为(this_ + 0)是一个右值。当然不是这样的(没有这样的宏),但是它可以帮助理解它– Johannes Schaub-litb …



11
如何使用反向迭代器调用擦除
我正在尝试做这样的事情: for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( i ); break; } } 但是,擦除需要迭代器,而不是反向迭代器。有没有一种方法可以将反向迭代器转换为常规迭代器,或从列表中删除此元素的另一种方法?
181 c++ 

1
C ++中有最大数组长度限制吗?
C ++中的数组有最大长度吗? 是C ++限制还是取决于我的机器?可以调整吗?它是否取决于数组的类型? 我可以以某种方式打破该限制吗?还是我必须寻找一种更好的信息存储方式?而最简单的方法应该是什么? 我要做的是将长整型存储在数组中,我正在Linux环境中工作。我的问题是:如果我需要存储N个大于10位的N个长整型数组,该怎么办? 我需要这样做是因为我正在为学校编写一些加密算法(例如p-Pollard),并碰到了整数和数组表示长度的墙。
181 c++  arrays 

25
目标文件中未解析的外部符号
在Visual Studio中进行编码时,出现未解决的外部符号错误,我不知道该怎么办。我不知道怎么了 你能破译我吗?我应该在哪里寻找哪种错误? 1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) …

19
如何在C ++代码/项目中查找内存泄漏?
我是Windows平台上的C ++程序员。我正在使用Visual Studio 2008。 我通常会在代码中出现内存泄漏。 通常,我可以通过检查代码来发现内存泄漏,但这很麻烦,而且并不总是一种好的方法。 由于我买不起付费的内存泄漏检测工具,因此我希望你们提出避免内存泄漏的最佳方法。 我想知道程序员如何发现内存泄漏。 是否应遵循任何标准或程序以确保程序中没有内存泄漏?
180 c++  memory-leaks 

16
C和C ++中的静态变量存储在哪里?
静态变量存储在可执行文件的哪个段(.BSS,.DATA等)中,因此它们不会发生名称冲突?例如: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; printf("%d,%d", foo, bar); printf("%d, %d", foo, bar); } } 如果我同时编译两个文件并将其链接到重复调用fooTest()和barTest的主文件,则printf语句将独立增加。这是有道理的,因为foo和bar变量是转换单元的本地变量。 但是在哪里分配存储空间? 明确地说,假设您拥有一个可以以ELF格式输出文件的工具链。因此,我相信,有有将一些空间,对于那些静态变量的可执行文件保留。 出于讨论目的,假设我们使用GCC工具链。

4
运行计算机程序会怎样?
我知道一般的理论,但我不适合细节。 我知道程序驻留在计算机的辅助存储器中。一旦程序开始执行,它将被完全复制到RAM中。然后,处理器一次检索几条指令(取决于总线的大小),将它们放入寄存器中并执行它们。 我也知道计算机程序使用两种内存:堆栈和堆,它们也是计算机主内存的一部分。堆栈用于非动态内存,堆用于动态内存(例如,与newC ++中的运算符相关的所有内容) 我不明白的是这两件事是如何联系的。堆栈在什么时候用于执行指令?指令从RAM到堆栈,再到寄存器?



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.