Questions tagged «c++»

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

7
使用无符号而不是带符号的int更有可能导致错误吗?为什么?
在《Google C ++样式指南》的“无符号整数”主题上,建议 由于历史原因,C ++标准还使用无符号整数来表示容器的大小-标准主体的许多成员认为这是一个错误,但实际上目前无法修复。无符号算术不对简单整数的行为进行建模,而是由标准定义以对模块化算术进行建模(围绕上溢/下溢进行环绕),这一事实意味着编译器无法诊断出大量的错误。 模块化算法有什么问题?这不是unsigned int的预期行为吗? 该指南指的是哪种错误(重要的类)?错误溢出? 不要仅使用无符号类型来断言变量是非负数。 我可以想到在未签名的int上使用有符号的int的原因之一是,如果它确实溢出(变为负数),则更易于检测。


6
检测CPU架构的编译时间
编译C或C ++代码时找出CPU体系结构的最可靠方法是什么?据我所知,不同的编译器有自己的一组非标准预处理器定义(_M_X86在MSVS中__i386__,__arm__在GCC中等)。 有没有检测我要构建的体系结构的标准方法?如果不是,是否有针对各种编译器的此类定义的完整列表的来源,例如带有所有样板文件的标头#ifdef?

4
C ++ 11是否允许vector <const T>?
容器要求已从C ++ 03更改为C ++ 11。尽管C ++ 03具有全面的要求(例如,副本的可构造性和向量的可分配性),但C ++ 11定义了每个容器操作的细粒度要求(第23.2节)。 结果,您可以例如将可复制构造但不可分配的类型(例如具有const成员的结构)存储在向量中,只要您仅执行某些不需要分配的操作(构造且push_back为此类操作)即可;insert不是)。 我想知道的是:这是否意味着该标准现在允许vector&lt;const T&gt;?我看不出有任何理由不应该-const T与具有const成员的结构一样,是一种可复制构造但不能分配的类型-但我可能错过了一些东西。 (让我觉得我可能错过了一些东西的部分原因是,如果您尝试实例化vector&lt;const T&gt;,gcc主干会崩溃并烧毁,但是vector&lt;T&gt;对于T具有const成员的地方也很好)。
81 c++  vector  c++11  constants 

3
覆盖非虚拟方法
让我们在Visual C ++ 2010中假设这种情况: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class Base { public: int b; void Display() { cout&lt;&lt;"Base: Non-virtual display."&lt;&lt;endl; }; virtual void vDisplay() { cout&lt;&lt;"Base: Virtual display."&lt;&lt;endl; }; }; class Derived : public Base { public: int d; void Display() { cout&lt;&lt;"Derived: Non-virtual display."&lt;&lt;endl; }; virtual …
81 c++  overriding 


4
C比C ++快得多[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 据我了解,所有脚本语言和核心科学程序通常都是用C编写的;这使实现变得凌乱而又直截了当。 我知道这些人想最大限度地发挥他们的性能,但是使用C字符串和C结构与使用C ++类之间确实存在区别。C ++似乎以相同的方式工作,除了虚函数外,它还存储一个类函数一次,并且该类的每个实例都调用该函数。 是什么使C更快,并且在必须是最快的项目(例如python或sqlite)中有显着区别吗?
81 c++  c  performance 

4
内存对齐:如何使用alignof / alignas?
我现在正在使用共享内存。 我无法理解alignof和alignas。 cppreference不清楚:alignof返回“ alignment”,但是什么是“ alignment”?要为下一个要对齐的块添加的字节数?填充尺寸?堆栈溢出/博客条目也不清楚。 有人能解释清楚alignof和alignas?

5
引用成员变量作为类成员
在我的工作场所,我看到这种风格被广泛使用: #include &lt;iostream&gt; using namespace std; class A { public: A(int&amp; thing) : m_thing(thing) {} void printit() { cout &lt;&lt; m_thing &lt;&lt; endl; } protected: const int&amp; m_thing; //usually would be more complex object }; int main(int argc, char* argv[]) { int myint = 5; A myA(myint); myA.printit(); return 0; …
81 c++  reference 

9
C ++队列与队列
队列和堆栈是被广泛提及的结构。但是,在C ++中,对于队列,您可以通过两种方式进行: #include &lt;queue&gt; #include &lt;deque&gt; 但是对于堆栈,您只能这样做 #include &lt;stack&gt; 我的问题是,队列和双端队列有什么区别,为什么要提出两种结构?对于堆栈,可以包括任何其他结构吗?
81 c++  containers 

3
我不明白为什么编译
我当然会缺少一些东西,但是我不明白为什么会这样编译(同时使用g ++和clang ++): struct A { }; struct B { }; int main() { A a(B); } 首先,B是一个类型……不是一个值。我应该如何解释此代码?

6
使用C ++ 11复制代码
我目前正在从事一个项目,但遇到以下问题。 我有一个C ++方法,希望以两种不同的方式工作: void MyFunction() { foo(); bar(); foobar(); } void MyFunctionWithABonus() { foo(); bar(); doBonusStuff(); foobar(); } 而且我不想重复我的代码,因为实际功能要长得多。问题是在任何情况下都不能在调用MyFunction而不是MyFunctionWithABonus时增加程序的执行时间。这就是为什么我不能只具有通过C ++比较检查的布尔参数。 我的想法是使用C ++模板虚拟地复制我的代码,但是我无法想到一种无需额外执行时间且无需复制代码的方法。 我不是模板专家,所以我可能会缺少一些东西。 你们有什么主意吗?还是在C ++ 11中这是不可能的?
80 c++  c++11  templates 

3
Boost:assert.hpp文件中的P :: ************是什么意思?
在boost / mpl / assert.hpp中,我看到了以下内容: template&lt;class Pred&gt; struct eval_assert { typedef typename extract_assert_pred&lt;Pred&gt;::type P; typedef typename P::type p_type; typedef typename ::boost::mpl::if_c&lt;p_type::value, AUX778076_ASSERT_ARG(assert&lt;false&gt;), failed ************ P::************ &gt;::type type; }; 如果************可以将第一个视为struct的指针失败,那么P::************对我来说真的没有任何意义。这是标准的C ++吗?
80 c++  pointers  boost 

4
C ++数组初始化
是将数组初始化为全0的形式吗 char myarray[ARRAY_SIZE] = {0} 所有编译器都支持吗?, 如果是这样,是否有与其他类型相似的语法?例如 bool myBoolArray[ARRAY_SIZE] = {false}
80 c++  syntax 

3
增加“掩码”位集
我目前正在编写树枚举器的过程中遇到以下问题: 我正在查看被屏蔽的位集,即设置的位是掩码的子集的位集,即0000101具有mask的位集1010101。我要完成的是增加位集,但仅是相对于掩码位。在此示例中,结果将为0010000。为了使其更清晰,仅提取被屏蔽的位,即0011,将它们增加到0100并再次将它们分配给屏蔽位,得到0010000。 除了使用bitcans和前缀掩码的组合手动执行操作之外,有人能看到实现此目的的有效方法吗?

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.