草庐IT

range-header

全部标签

c++ - 将所有项目头文件放入一个文件 HEADERS.h 中是个好主意吗?

前几天我和我的导师谈过这个问题。他告诉我,我可以从事较小的项目,但我正在启动一个国际象棋程序,我想知道StackOverflow对这个问题的看法。我应该将所有header包含在一个文件中,还是将它们分开? 最佳答案 通常,您需要单独的header。包含不必要的内容会造成一些潜在的坏事。这是导致编译时间变慢的一个最大原因。不必要地包含额外的头文件会减慢编译速度,因为每个源文件都必须担心比它需要的更多的信息。它从一个小问题开始,在您知道之前,数百名开发人员每个都在浪费数十到数百小时,因为问题已经超出了控制范围,无法修复。即使您处理的是小

c++ - 在抛出 'std::out_of_range' 实例后调用终止

为什么会发生这种情况我的程序说它没有错误但是当我运行它时我在抛出'std::out_of_range'what():vector:_M_range_check实例后被调用终止。我是c++的新手,所以我不明白这些错误#include#include#include#includeusingnamespacestd;usingstd::vector;intmain(){vectordeck;vectornums;default_random_engineeng(time(0));uniform_int_distributiondis(0,51);intpos1;intpos2;intnum

c++ - 自定义 header 高于标准?

将自定义header放在include部分比标准header更高的位置是否合理?例如在someclass.hpp中包含部分:#include"someclass.h"#include"global.h"#include#include这是最佳实践吗?如果是,利润是多少? 最佳答案 原因是,如果您忘记在someclass.h中包含依赖header,那么无论实现文件将其作为第一个header包含,都会收到未定义或未声明类型的警告/错误,什么的。如果您首先包含其他header,那么您可能会掩盖这一事实-假设包含的header定义了所需的类

c++ - C++ 方法名称可以在 header 中由类名限定吗?

简单的问题,这是有效的C++吗:classFoo{voidFoo::doSomething();};问题的重点:在类声明内部中重复使用类名和方法名前的双冒号是否有效?我在编译使用g++4.2.3执行此操作的代码时遇到问题。在深入研究和更改代码之前,我很想在这里看到对描述语法的内容的引用。或者降级编译器;这确实是用g++3.3.6构建的。我得到的错误是(大致):Foo.h:3:error:extraqualification‘Foo::’onmember‘doSomething’我用Google搜索了一下,但找不到任何东西。我没有标准,即使我有,我也可能要花很长时间才能找到任何权威的东西

c++ - 错误 : Range-based 'for' loops are not allowed in C++98 mode

所以我正在关注此页面上的教程:http://www.cplusplus.com/doc/tutorial/control/但是我在做范围/基于for循环时遇到了麻烦。我找到了这个页面:GNUGCCcompilerupdating那里的答案说我应该打开“项目”和“属性”。但是当我尝试这样做时,“属性”选项变灰了,没有任何解释:http://imageshack.com/a/img571/4371/xd1x.png那么..我怎样才能激活范围/基于for循环? 最佳答案 将-std=c++11标志传递给编译器。当然,GCC应该足够新(>=

c++ - 清理遗留代码 "header spaghetti"

任何清理“headerspaghetti”的推荐做法编译时间慢(Linux/Unix)?在GCC中是否有任何等同于“#pragmaonce”的东西?(发现关于此的相互矛盾的消息)谢谢。 最佳答案 假设您熟悉“includeguards”(header开头的#ifdef..),另一种加快构建时间的方法是使用外部includeguards。它在“LargeScaleC++SoftwareDesign”中进行了讨论。这个想法是,经典的包含guard,与#pragmaonce不同,不会让您从第二次开始忽略header所需的预处理器解析(即它

在 header 中声明的c++私有(private)成员与在cpp文件中声明的静态变量

我有一个变量,我更喜欢在cpp文件而不是头文件中声明。它应该只能被该类的对象访问。该变量应该为该类的每个对象都有一个单独的拷贝。继承不是必须的。通常,我会在类定义中声明它。嗯:classA{private:intnumber;}但是,我可以这样做吗?B.h:classB{private://nothing}B.cpp:staticintnumber; 最佳答案 不,如果您采用第二种方法,您会将其设为静态变量,这意味着您不会为该类的每个对象拥有不同的拷贝(它们将共享该变量)。无论哪种方式,如果它只应该被那个类访问,它应该放在类声明中,

c++ - C++17 中新的基于范围的 for 循环如何帮助 Ranges TS?

委员会将基于范围的for循环从:C++11:{auto&&__range=range_expression;for(auto__begin=begin_expr,__end=end_expr;__begin!=__end;++__begin){range_declaration=*__begin;loop_statement}}C++17:{auto&&__range=range_expression;auto__begin=begin_expr;auto__end=end_expr;for(;__begin!=__end;++__begin){range_declaration=*_

c++ - Visual Studio 2017 中的 Intellisense 可以建议包含 C++ header 吗?

我的背景主要是C#,多年来一直使用ReSharper。能够将我的光标放在未解析的引用上,按Alt+Enter,然后选择一个选项来添加适当的using语句是非常宝贵的。现在,VisualStudio2017原生具有此功能!有了这个(以及VS2017中添加的许多其他功能),我摆脱了ReSharper,享受了非常快速和响应迅速的VisualStudio体验。我最近开始用C++做一些工作,虽然我确实从Intellisense那里得到了关于字段和方法的建议,但当涉及到Unresolved引用时,它不会向#include建议任何header>.我的问题是VisualStudio2017是否添加了为

c++ - 寻找一种在运行时检测 valgrind/memcheck 而不包括 valgrind header 的方法

Valgrind/Memcheck可能很密集,会导致运行时性能显着下降。我需要一种方法(在运行时)检测它,以便禁用所有辅助服务和功能,以便在24小时内执行检查。我不希望将任何显式标志传递给程序,但那是一种方式。我尝试在符号表中搜索(通过abi调用)以查找valgrind或memcheck符号,但一无所获。我尝试检查堆栈(通过boost::stacktrace),但那里也什么也没有。 最佳答案 不确定在Valgrind下运行时有不同的行为是个好主意,因为Valgrind的目标是在预期使用情况下断言您的软件。无论如何,Valgrind不