Questions tagged «c++»

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

15
如何避免expr中的溢出。A B C D
我需要计算一个看起来像:的表达式 A*B - C*D,其类型为:signed long long int A, B, C, D; 每个数字都可以很大(不会溢出其类型)。虽然A*B可能导致溢出,但表达式A*B - C*D的确很小。如何正确计算? 例如:MAX * MAX - (MAX - 1) * (MAX + 1) == 1,其中MAX = LLONG_MAX - n和n-一些自然数。
161 c++  c  integer-overflow 

2
为什么在此C代码中将字母分成多个范围?
在一个自定义库中,我看到了一个实现: inline int is_upper_alpha(char chValue) { if (((chValue >= 'A') && (chValue <= 'I')) || ((chValue >= 'J') && (chValue <= 'R')) || ((chValue >= 'S') && (chValue <= 'Z'))) return 1; return 0; } 是复活节彩蛋,还是与标准C / C ++方法相比有什么优势? inline int is_upper_alpha(char chValue) { return ((chValue >= 'A') && (chValue …
161 c++  c  character  toupper 

19
有没有可用的C ++重构工具?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6个月前关闭。 改善这个问题 有谁知道一个功能强大的C ++重构工具,该工具可以与大型代码库(大约100.000行)可靠地工作? 在过去的几年中,我尝试了一次又一次的尝试:SlickEdit,Eclipse CDT。它们都根本不可用。 摘要:我花了一些时间并评估了“ Visual Assist X”以及“ Refactor for C ++”。两者都有一些令人印象深刻的功能,但两者也都远非完美。如果不进行手动修改,提取大块代码通常无法令人满意-因此无法获得回报。 “ Visual Assist X”具有很好的功能,例如更完整的自动完成功能。但是,它会导致大量闪烁,并在某些点上减慢速度。 因此,我认为答案是:“不,没有针对C ++的生产就绪的重构工具” 2015年3月更新 至于hdoghmens今天答复,我尝试使用Resharper for C ++。他的链接 https://www.jetbrains.com/resharper/没有提及C ++。但是我发现一年多以前在这里发布的Resharper C ++: https://www.jetbrains.com/resharper/features/cpp.html 我使用20MB的代码库尝试了VC2010。 测试1:提​​取方法:导致Resharper异常。没有源代码更改。 测试2:使用不同来源的提取方法:效果很好 测试3:更改提取函数的签名:导致C ++代码损坏: bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&) 也许这就是为什么C ++不在主页上列出。 我认为该问题的答案仍然是“否”。
161 c++  refactoring 

11
为什么在创建带参数的默认无参数构造函数时会消失
在C#,C ++和Java中,当创建带有参数的构造函数时,默认的无参数函数将消失。我一直只是接受这个事实,但是现在我开始怀疑为什么。 这种行为的原因是什么?难道仅仅是“安全措施/猜测”这样的说法:“如果您创建了自己的构造函数,那么您可能不希望这种隐式结构徘徊”?还是出于技术原因,一旦您自己创建了构造函数,编译器就不可能添加一个?

7
std :: function vs template
感谢C ++ 11,我们获得了std::function函子包装器系列。不幸的是,我一直只听到关于这些新功能的坏消息。最受欢迎的是,它们运行缓慢。我测试了一下,与模板相比,它们确实很烂。 #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const auto tp1 = system_clock::now(); for (int i …

5
为什么我们需要需求?
C ++ 20概念的角落之一是在某些情况下您必须编写requires requires。例如,此示例来自[expr.prim.req] / 3: 甲需要表达也可以在使用需要子句([温度])作为写在模板参数特设约束,如下面的一个的一种方法: template<typename T> requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } 第一个需求引入了require-clause,第二个需求引入了require-expression。 需要第二个requires关键字的技术原因是什么?为什么我们不能只允许写作: template<typename T> requires (T x) { x + x; } T add(T a, T b) { return a + …
161 c++  c++-concepts  c++20 


9
C ++中的堆栈,静态和堆
我已经搜索过,但是我对这三个概念不太了解。什么时候必须使用动态分配(在堆中),它的真正优势是什么?静态和堆栈有什么问题?我可以编写整个应用程序而不在堆中分配变量吗? 我听说其他语言结合了“垃圾收集器”,因此您不必担心内存。垃圾收集器做什么? 如果使用此垃圾收集器无法完成操作,那么您可以自己处理内存吗? 有人对我说了这个声明: int * asafe=new int; 我有一个“指向指针的指针”。这是什么意思?它的不同之处在于: asafe=new int; ?

3
如何获取指向原始数据的std :: vector指针?
我试图std::vector用作char数组。 我的函数接受一个空指针: void process_data(const void *data); 在我仅使用此代码之前: char something[] = "my data here"; process_data(something); 哪个按预期工作。 但是现在我需要动态性std::vector,因此我尝试了以下代码: vector<char> something; *cut* process_data(something); 问题是,如何将char向量传递给函数,以便可以访问向量原始数据(无论它是哪种格式–浮点数,等等)? 我尝试了这个: process_data(&something); 还有这个: process_data(&something.begin()); 但是它返回了一个指向乱码的指针,后者发出警告:warning C4238: nonstandard extension used : class rvalue used as lvalue。
160 c++  stl  vector 

3
标准容器的复杂性保证是什么?
显然;-)标准容器提供某种形式的保证。 哪种类型的担保以及不同类型的容器之间到底有什么区别? 从工作的SGI页(约STL)我拿出这样的: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence Back Sequence Forward/Reverse/Random Container std::deque: Sequence …
160 c++  stl  containers  big-o 

14
Windows上最快的屏幕捕获方法
我想为Windows平台编写一个截屏程序,但是不确定如何捕获屏幕。我知道的唯一方法是使用GDI,但我很好奇是否还有其他方法可以解决此问题,如果有的话,哪种方法开销最少?速度是重中之重。 该截屏节目将用于记录游戏画面,但是,如果这确实缩小了选项的范围,我仍然愿意接受不属于此范围的任何其他建议。毕竟,知识还不错。 编辑:我碰到了这篇文章:各种捕获屏幕的方法。它向我介绍了Windows Media API的实现方式和DirectX的实现方式。它在结论中提到禁用硬件加速可以大大提高捕获应用程序的性能。我很好奇为什么会这样。谁能为我填补缺失的空白? 编辑:我读过诸如Camtasia之类的截屏程序使用它们自己的捕获驱动程序。有人可以详细解释它的工作原理以及为什么它更快。我可能还需要有关实现类似内容的指导,但是我确信无论如何都存在现有文档。 另外,我现在知道FRAPS如何记录屏幕。它挂接底层图形API以从后缓冲区读取。据我了解,这比从前端缓冲区读取要快,因为您正在从系统RAM而不是视频RAM进行读取。您可以在这里阅读文章。
159 c++  c  windows 


13
“在编译时分配的内存”的真正含义是什么?
在像C和C ++这样的编程语言中,人们经常引用静态和动态内存分配。我理解这个概念,但是“在编译时分配(保留)所有内存”这句话总是让我感到困惑。 据我了解,编译将高级C / C ++代码转换为机器语言并输出可执行文件。如何在已编译文件中“分配”内存?难道不是所有虚拟内存管理工具都总是在RAM中分配内存吗? 按照定义,内存分配不是运行时的概念吗? 如果我在C / C ++代码中创建一个1KB的静态分配变量,这将使可执行文件的大小增加相同的数量吗? 这是在“静态分配”标题下使用该短语的页面之一。 返璞归真:内存分配,回顾历史

2
为班级成员使用智能指针
我在理解智能指针在C ++ 11中作为类成员的用法时遇到了麻烦。我已经阅读了很多关于智能指针,我想我不知道如何unique_ptr和shared_ptr/ weak_ptr做工一般。我不明白的是真正的用法。似乎每个人都建议将其unique_ptr作为几乎所有时间都使用的方式。但是我将如何实现这样的事情: class Device { }; class Settings { Device *device; public: Settings(Device *device) { this->device = device; } Device *getDevice() { return device; } }; int main() { Device *device = new Device(); Settings settings(device); // ... Device *myDevice = settings.getDevice(); // do something with myDevice... } …

12
使用Qt时如何打印到控制台
我正在使用Qt4和C ++制作计算机图形学中的某些程序。我需要能够在运行时在控制台中打印一些变量,而不是进行调试,但是cout即使添加了这些库,它似乎也不起作用。有没有办法做到这一点?
159 c++  qt  cout 

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.