草庐IT

c++ - 避免在构造函数中使用虚方法

假设我有以下类层次结构:classBase{virtualintGetClassID(){return0;};public:Base(){SomeSingleton.RegisterThisObject(this->GetClassID());}classDerived{virtualintGetClassID(){return1;};public:Derived():Base(){};}好吧,这一切都是从我的真实案例中简化而来的,但这就是它的一般要点。我想避免在每个派生类的构造函数中调用RegisterThisObject,因此我试图将调用移至基类的构造函数。有没有什么模式可以让我在

c++ - "not, and, or, not_eq.."是 C++ 标准的一部分吗? (以及为什么可以在代码中使用或避免使用它们?)

所以它看起来像所有这些:http://www.cplusplus.com/reference/clibrary/ciso646/是c++中的关键字。我的问题是。这是c++标准的一部分吗?我可以依赖主要编译器的支持吗?我知道gcc确实支持这些关键字。最后,也许这更像是一个偏好或风格问题,但与标准运算符(!、!=、&&...等)相比,使用关键字是否有任何优势? 最佳答案 Myquestionis.Isthisapartofthec++standard?是的。CanIrelyonthistobesupportedbymajorcompil

c++ - 避免切片异常类型 (C++)

我正在用C++为我的库设计异常层次结构。“层次结构”是从std::runtime_error派生的4个类。我想避免slicingproblem对于异常类,因此使复制构造函数受到保护。但显然gcc在抛出它们的实例时需要调用复制构造函数,因此提示protected复制构造函数。VisualC++8.0可以很好地编译相同的代码。是否有任何可移植的方法来化解异常类的切片问题?该标准是否说明了实现是否可以/应该需要要抛出的类的复制构造函数? 最佳答案 您的异常需要有一个公共(public)复制构造函数。编译器必须能够复制它才能使异常处理正常工

c++ - 使用 STL 编写内存泄漏安全代码应该避免什么?

我使用STL已经有一段时间了,但除了在其他代码中偶尔使用vector之外,主要是为了实现它而实现算法。在我开始更多地使用它之前,我想知道人们在使用STL时常犯的错误是什么——特别是,在使用STL模板以防止我的代码发生内存泄漏时,我应该注意什么? 最佳答案 有效使用STL有很多瓶颈,如果你想了解更多,我推荐这本书"EffectiveSTL"byS.Meyers. 关于c++-使用STL编写内存泄漏安全代码应该避免什么?,我们在StackOverflow上找到一个类似的问题:

c++ - 在 C++ 中,当我需要使用枚举时,如何避免#include 头文件?

在我的C++头文件中,我尝试使用前向声明(classMyClass;)而不是#including类头,正如许多C++编码标准(谷歌C++风格指南就是其中之一)所推荐的那样。不幸的是,当我引入枚举时,我不能再做前向声明了。像这样:////myclass1.hpp////classMyClass1{enumMyEnum1{Enum_A,Enum_B,Enum_C};};////myclass2.hpp//////Iwanttoavoidthis#include"myclass1.hpp"//I'dprefertodothis(forwarddeclaration)classMyClass1

c++ - 编译为多个指令集时避免重复符号

我正在使用基于处理器特性的CPU调度来切换复杂数值算法的实现。我想包括两个版本(为了参数的缘故,sse2和sse3版本)我在同一个动态库中编译。目前采用的方法是将所有特定于体系结构的代码包装到一个命名空间中,例如namespacesse2和namespacesse3从而在链接到最终动态库时避免重复的符号名称。但是,如果我在sse2和ss3版本中都使用了一些我无法控制的代码(例如std::vector),会发生什么情况。据我所知,std::vector实现将出现在sse2和sse3目标文件中,但理论上可以包含不同的指令,具体取决于编译器执行的优化。当我将这些目标文件链接到动态库时,将使用

c++ - 如何避免 XCode 调试器进入标准系统头文件?

在XCode调试器中使用“Stepinto”命令时,如何避免它进入标准系统头文件?这种行为是有道理的,因为它是一个正在编译的头文件,但却是浪费时间。我从不想看到标准库中发生了什么,只想看到我的代码。 最佳答案 不是永久性的修复,但是“stepinto”命令的左边是一个“stepover”。不确定是否有更好的方法,但我一直在做的就是在查看标准系统函数时切换到跳过按钮。 关于c++-如何避免XCode调试器进入标准系统头文件?,我们在StackOverflow上找到一个类似的问题:

Collectors.toMap的暗坑与避免方式

使用Java的stream中的Collectors可以很方便地做容器间的转换,可以少写很多代码。但是其中有暗含的坑需要注意和避免,本文探讨Collectors.toMap(JDK8版本)。Collectors.toMap可以将一个流转化成Map,常见于需要将List转换成Map以便于进一步操作的场景,比如在通过RPC接口获取一个返回结果、从DB中查询到匹配的多条数据后,对其按某个字段(经常是主键id)做分组。这里先定义一个简单的类:publicclassUser{privateLongid;privateStringname;}后续所有代码的目的均为将这个User类组成的List转换为id作为

c++ - 如果我在 header 中声明 namespace ,是否可以避免在 .cpp 文件中使用类名?

这个问题在这里已经有了答案:C++:"Classnamespaces"?[duplicate](4个答案)关闭9年前。在C++中,我只想在.h文件中声明一个DisplayInfo类,然后在.cpp文件中,不必键入第一个DisplayInfo::DisplayInfo()和每个函数定义。遗憾的是,我已经查看了20多个主题和我的C++书籍两个多小时,但仍无法解决这个问题。我认为这是因为我正在尝试在C++中使用我10年的Java培训。第一次试验://DisplayInfo.hnamespaceDisplayInfoNamespace{ClassDisplayInfo{public:Displ

c++ - 如何避免 GDB 中符号的命名空间前缀?

我正在使用C++库。该库使用多个命名空间。调试时,我必须在每个符号名称前加上命名空间前缀。它会导致大量额外的工作和打字。C++有usingnamespaceX的概念,可以更轻松地使用符号(大量的手动操作)。我在GDB中寻找类似的东西。例如,我想要bFoo::bar而不是bMyLibNamespace::Foo::bar。GDB似乎没有与命名空间相关的帮助,但我可能做错了什么:(gdb)helpnamespaceUndefinedcommand:"namespace".Try"help".(gdb)namespacehelpUndefinedcommand:"namespace".Try