Questions tagged «c++»

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



9
什么时候以及为什么编译器会在malloc / free / new / delete上将内存初始化为0xCD,0xDD等?
我知道编译器有时会使用诸如0xCD和的某些模式来初始化内存0xDD。我想知道的是何时以及为什么发生这种情况。 什么时候 这特定于所使用的编译器吗? 做malloc/new与free/delete工作以同样的方式对本? 它是平台特定的吗? 它会在其他操作系统(例如Linux或)上发生VxWorks吗? 为什么 我的理解是,这仅在Win32调试配置中发生,它用于检测内存溢出并帮助编译器捕获异常。 您能提供一些有关初始化有用的实际例子吗? 我记得读过一些东西(也许在代码完成2中),说在分配内存时将内存初始化为已知模式是很好的,某些模式会触发中断,Win32从而导致调试器中显示异常。 这有多便携?

4
C ++中“ const”有多少种用途?
作为C ++的新手程序员,有些构造对我来说仍然很模糊,其中之一是const。您可以在许多地方使用它,并具有许多不同的效果,对于初学者来说,几乎不可能活着。一些C ++专家会永远解释一次各种用法以及是否和/或为什么不使用它们吗?
129 c++  const 


8
应该将operator <<实现为朋友还是成员函数?
这基本上就是问题,是否有“正确”的实施方法operator&lt;&lt;?阅读此内容,我可以看到类似以下内容的内容: friend bool operator&lt;&lt;(obj const&amp; lhs, obj const&amp; rhs); 比类似的东西更喜欢 ostream&amp; operator&lt;&lt;(obj const&amp; rhs); 但是我不太明白为什么要使用其中一个。 我的个人情况是: friend ostream &amp; operator&lt;&lt;(ostream &amp;os, const Paragraph&amp; p) { return os &lt;&lt; p.to_str(); } 但是我可能可以做: ostream &amp; operator&lt;&lt;(ostream &amp;os) { return os &lt;&lt; paragraph; } 我应该基于什么理由做出此决定? 注意事项: Paragraph::to_str = (return paragraph) 其中段落是一个字符串。


30
如何将枚举类型变量转换为字符串?
如何使printf显示枚举类型的变量的值?例如: typedef enum {Linux, Apple, Windows} OS_type; OS_type myOS = Linux; 我需要的是 printenum(OS_type, "My OS is %s", myOS); 其中必须显示字符串“ Linux”,而不是整数。 我想,首先我必须创建一个值索引的字符串数组。但是我不知道这是否是最美丽的方式。有可能吗?
128 c++  c  preprocessor  ansi-c 


10
指针表达式:* ptr ++,* ++ ptr和++ * ptr
最近,我遇到了一个我自己无法理解的问题。 这三个表达式实际上是什么意思? *ptr++ *++ptr ++*ptr 我试过里奇。但不幸的是,他无法按照他对这3项操作的讲述进行操作。 我知道它们都是为了增加指针/指向的值而执行的。我还可以猜测,关于评估的优先级和顺序可能有很多事情。就像先递增指针,然后获取该指针的内容一样,先获取内容,然后递增指针,等等。如您所见,我对它们的实际操作并不清楚,我想尽快清除。但是当我有机会在程序中应用它们时,我真的迷失了。例如: int main() { const char *p = "Hello"; while(*p++) printf("%c",*p); return 0; } 给我这个输出: ello 但是我希望它能打印出来Hello。最后一个要求-请提供示例,说明每个表达式在给定代码段中的工作方式。大多数时候,只有一小段理论飞过我的脑海。
128 c++  c  pointers  increment 

2
功能标题中的箭头运算符(->)
我遇到以下代码: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } 我无法理解的一件事是: 在哪里可以找到箭头-&gt;标题()在函数标题中的含义?我完全从逻辑上猜测,-&gt;运算符确定auto要推导的类型,但是我想弄清楚这一点。我找不到任何信息。
128 c++  c++11  auto  decltype 

12
为什么不删除将指针设置为NULL?
我一直想知道为什么删除后将指针自动设置为NULL 并不是标准的一部分。如果得到解决,那么由于无效指针而导致的许多崩溃将不会发生。但话虽如此,我仍然可以想到该标准限制了这一点的几个原因: 性能: 附加说明可能会降低delete性能。 可能是因为const指针。 然后我想标准再次可以为这种特殊情况做些什么。 有谁知道不允许这样做的确切原因?

7
如果在C / C ++中定义一个0大小的数组,会发生什么情况?
只是好奇,如果我int array[0];在代码中定义零长度数组,实际上会发生什么?GCC一点也不抱怨。 样例程序 #include &lt;stdio.h&gt; int main() { int arr[0]; return 0; } 澄清度 我实际上是想弄清楚是否以这种方式初始化了零长度数组,而不是像在Darhazer的注释中指出的那样,对可变长度进行了优化。 这是因为我必须向野外发布一些代码,所以我试图确定是否必须处理SIZE定义为的情况0,这在某些静态定义的代码中发生int array[SIZE]; 实际上,我很惊讶GCC没有投诉,这引起了我的疑问。从我收到的答案中,我认为缺少警告的主要原因是支持未使用新的[]语法更新的旧代码。 因为我主要是想知道错误,所以我将隆丁的答案标记为正确的(纳瓦兹是第一个,但还不够完整),其他人则指出了它在尾部填充结构中的实际用途是“正确的”。正是我想要的。
127 c++  c  arrays 

9
Trigraph序列在C ++中的用途?
根据C ++'03 Standard 2.3 / 1: 在进行任何其他处理之前,以下三个字符序列之一(“字母序列”)的每次出现都被表1中指示的单个字符代替。 ---------------------------------------------------------------------------- | trigraph | replacement | trigraph | replacement | trigraph | replacement | ---------------------------------------------------------------------------- | ??= | # | ??( | [ | ??&lt; | { | | ??/ | \ | ??) | ] | ??&gt; | } | | ??’ …
127 c++  c++03  trigraphs 

11
谁设计/设计了C ++的IOStreams,并且按照当今的标准,它仍然被认为设计良好吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 首先,似乎我在征求主观意见,但这并不是我所追求的。我很想听听有关该主题的一些有充分根据的论点。 为了对如何设计现代流/序列化框架有所了解,我最近得到了Angelika Langer和Klaus Kreft撰写的《Standard C ++ IOStreams and Locales》一书的副本。我认为,如果IOStreams设计不当,那么它就不会首先进入C ++标准库。 在阅读了本书的各个部分之后,我开始怀疑IOStreams是否可以从总体体系结构的角度与STL进行比较。阅读例如对Alexander Stepanov(STL的“发明人”)的采访,以了解有关STL的一些设计决策。 特别令我惊讶的是: 谁来负责IOStreams的总体设计似乎是个未知数(我很想阅读有关此的一些背景信息-有人知道好的资源吗?); 一旦你钻研输入输出流,例如眼前表面之下,如果你想输入输出流用自己的类扩展,你会得到一个接口具有相当神秘和扑朔迷离的成员函数的名称,例如getloc/ imbue,uflow/ underflow,snextc/ sbumpc/ sgetc/ sgetn,pbase/ pptr/ epptr(和有甚至更糟的例子)。这使得理解整体设计以及单个零件如何协作变得更加困难。即使我上面提到的那本书没有帮助那多(恕我直言) 因此,我的问题是: 如果你要判断今天的软件工程标准(如果确实是对这些任何普遍同意),将C ++的输入输出流仍然被认为是经过精心设计?(我不想通过通常认为过时的方法来提高软件设计技能。)
127 c++  iostream 

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.