Questions tagged «c++»

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


9
可以使用C预处理器来判断文件是否存在吗?
我有一个非常大的代码库(阅读:数千个模块),该代码具有在多个项目上共享的代码,这些项目都在具有不同C ++编译器的不同操作系统上运行。不用说,维护构建过程可能会很麻烦。 如果只有一种方法可以使预处理器忽略#includes当前文件中不存在的文件,那么在代码库中有许多地方可以对代码进行实质性的清理。有谁知道实现这一目标的方法? 目前,我们使用了一个#ifdef围绕#include在共享文件,与第二项目特定文件#define语句是否#include存在于该项目。这有效,但是很丑。人们在项目中添加或删除文件时常常会忘记正确更新定义。我已经考虑过编写一个预构建工具来使该文件保持最新状态,但是如果有一种与平台无关的方法来对预处理器执行此操作,则我宁愿那样做。有任何想法吗?

9
内置类型的性能:char,short,int,float,double
这似乎是一个愚蠢的问题,但是看到Alexandre C在另一个主题中的答复,我很好奇知道内置类型是否存在性能差异: charVS shortVSint主场迎战float 主场迎战double。 通常我们在现实生活项目中不会考虑这种性能差异(如果有的话),但是出于教育目的,我想知道这一点。可以问的一般问题是: 积分算术和浮点算术之间是否有性能差异? 哪个更快?更快的原因是什么?请解释一下。
72 c++  c  performance  built-in 

6
我们可以在C ++中重新分配参考吗?
我到处都读到必须先初始化引用,然后再重新初始化。 为了测试我的理解,我编写了以下小程序。似乎我实际上已经成功地重新分配了参考。有人可以向我解释程序中实际发生了什么吗? #include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() { int i = 5, j = 9; int &ri = i; cout << " ri is : " << ri <<"\n"; i = 10; cout << " ri is : " << ri << "\n"; ri …
72 c++  reference 

5
是否允许编译器优化堆内存的分配?
考虑使用以下简单代码new(我知道没有delete[],但是与这个问题无关): int main() { int* mem = new int[100]; return 0; } 是否允许编译器优化new调用? 在我的研究中,g ++(5.2.0)和Visual Studio 2015不能优化new调用,而clang(3.0+)可以优化调用。所有测试均已启用了全部优化功能(对于g ++和clang为-O3,对于Visual Studio为Release模式)。 是不是 new幕后进行系统调用,从而使编译器无法(而且是非法的)优化它吗? 编辑:我现在已经从程序中排除了未定义的行为: #include <new> int main() { int* mem = new (std::nothrow) int[100]; return 0; } clang 3.0不再优化了,但是更高版本。 编辑2: #include <new> int main() { int* mem = new (std::nothrow) int[1000]; …


7
按值传递vs按右值引用传递
我何时应该将函数声明为: void foo(Widget w); 相对于 void foo(Widget&& w);? 假设这是唯一的重载(例如,我选择一个或另一个,而不是两个,也没有其他重载)。不涉及模板。假设该功能foo需要拥有Widget(例如const Widget&,这不是本讨论的一部分)。在这些情况范围之外,我对任何答案都不感兴趣。有关为什么这些约束是问题的一部分,请参见文章末尾的附录。 我和我的同事可以想到的主要区别是,右值引用参数迫使您对副本明确。调用方负责制作显式副本,然后在std::move需要复制时将其传递给它。在按值传递的情况下,副本的成本被隐藏: //If foo is a pass by value function, calling + making a copy: Widget x{}; foo(x); //Implicit copy //Not shown: continues to use x locally //If foo is a pass by rvalue reference function, calling + making a copy: …
72 c++  c++11  c++14 

17
C ++是否应该消除头文件?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6个月前关闭。 改善这个问题 Java,C#等许多语言不会将声明与实现分开。C#具有部分类的概念,但是实现和声明仍然保留在同一文件中。 为什么C ++没有相同的模型?头文件更实用吗? 我指的是当前和即将发布的C ++标准版本。
72 c++  header-files 

3
如何使用迭代器?
我正在尝试计算两点之间的距离。我在C ++中将两个点存储在向量中:(0,0)和(1,1)。 我应该得到结果 0 1.4 1.4 0 但是我得到的实际结果是 0 1 -1 0 我认为在向量中使用迭代器的方式存在问题。我该如何解决这个问题? 我在下面发布了代码。 typedef struct point { float x; float y; } point; float distance(point *p1, point *p2) { return sqrt((p1->x - p2->x)*(p1->x - p2->x) + (p1->y - p2->y)*(p1->y - p2->y)); } int main() { vector <point> po; point …


10
科学计算中的F#性能
我很好奇F#性能与C ++性能相比如何?我问了一个关于Java的类似问题,我得到的印象是Java不适合进行大量数字运算。 我已经读到F#应该具有更高的可扩展性和更高的性能,但是与C ++相比,这种实际性能如何?有关当前实施的具体问题是: 浮点运算的效果如何? 它允许矢量指令吗 对优化编译器有多友好? 它有多少内存占用空间?是否允许对内存局部性进行细粒度控制? 它是否具有用于分布式存储处理器(例如Cray)的容量? 在涉及大量处理的计算科学中,它具有哪些有趣的功能? 是否有使用它的实际科学计算实现? 谢谢

4
为什么要使用MACRO + 0!= 0
在当前的代码库中,我看到以下模式: #if SOMETHING_SUPPORTED+0 != 0 ... #endif 不幸的是,这是一个非常古老的代码库,没人知道它是如何开始的。我认为它始于C,后来随着类逐渐转换为C,现在趋向于C ++ 我看不到使用以前的构造而不是“经典”的任何明显优势,但是也许我缺少了一些东西: #if SOMETHING_SUPPORTED ... #endif 你知道为什么要用一个#if MACRO+0 != 0代替#if MACRO吗?
72 c++  c 

3
为什么在std :: atomic中使用了volatile限定符?
从我从Herb Sutter和其他人那里读到的内容来看volatile,至少在C / C ++方面,您会认为并发编程是完全正交的概念。 但是,在GCC实现中,所有std::atomic的成员函数都具有volatile限定符。在Anthony Williams的实现中也是如此std::atomic。 那怎么办,我的atomic<>变量是否需要volatile?
72 c++  c++11  atomic  volatile 

2
5年后,还有什么比“最快的C ++代表”更好的了?
我知道“ C ++委托”这一主题已经死了,http://www.codeproject.com和http://stackoverflow.com都深深地覆盖了这个问题。 通常,似乎唐·克拉格斯顿(Don Clugston)最快的代表是许多人的首选。还有其他一些流行的。 但是,我注意到其中大多数文章都是较旧的(大约在2005年),并且许多设计选择似乎都是考虑到了诸如VC7之类的旧编译器。 我需要一个音频应用程序非常快速的委托实现。 我仍然需要它具有可移植性(Windows,Mac,Linux),但我只使用现代编译器(VC9,VS2008 SP1和GCC 4.5.x中的编译器)。 我的主要标准是: 它一定要快! 它必须与较新版本的编译器向前兼容。对于Don的实现,我对此表示怀疑,因为他明确声明它不符合标准。 可选地,KISS语法和易用性很高兴 多播会很好,尽管我坚信围绕任何委托库构建它确实很容易 此外,我真的不需要异国情调的功能。我只需要很好的旧方法指针即可。无需支持静态方法,自由函数或类似的东西。 到目前为止,推荐的方法是什么?仍使用Don版本吗?还是有关于另一种选择的“社区共识”? 我真的不想使用Boost.signal / signal2,因为就性能而言这是不可接受的。对QT的依赖也不可接受。 此外,我在谷歌搜索时看到了一些较新的库,例如cpp-events,但是我找不到用户的任何反馈,包括关于SO的反馈。

6
有使用Wt C ++框架的经验吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 有人认真使用过Wt吗? 运作良好吗? 您是否遇到某些限制?还是优势? Wt是用于开发Web应用程序的C ++库。 请避免讨论C ++是否是Web开发的好语言。我只想尝试一下Wt,因为这样做似乎很有趣。
72 c++  wt 

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.