草庐IT

static-analysis

全部标签

c++ - constexpr if 和 static_assert

P0292R1constexprif一直included,在C++17的轨道上。它似乎很有用(并且可以替代SFINAE的使用),但是关于static_assert的评论是错误的,不需要诊断在false分支中吓到我了:Disarmingstatic_assertdeclarationsinthenon-takenbranchofaconstexprifisnotproposed.voidf(){ifconstexpr(false)static_assert(false);//ill-formed}templatevoidg(){ifconstexpr(false)static_asser

c++ - Boost 序列化给出未定义的类型 'boost::STATIC_ASSERTION_FAILURE'

我正在学习使用boost将我的一些C++类序列化。我在接口(interface)中有一个结构。我使用boostserilaize函数像这样序列化这个结构。接口(interface).hstructX{constLongrate;}templatevoidserialize(Archive&ar,uint32version){ar&this->rate;}BOOST_CLASS_EXPORT(X);现在这个头文件将被我的主类使用。比方说main.cpp,这个主类的标题有主要.h#include"Interface.h"classMain{//somestufftemplatevoidse

c++ - 如何在代码库中查找未引用的类

我们正处于开发阶段,其中创建了许多可能短暂存在的代码,因为它实际上是脚手架,在某些时候会被其他东西取代,但通常会继续存在并成为忘记了。是否有任何好的技术可以在代码库中找到未使用的类?显然会有很多误报(例如库类:你可能没有使用所有标准容器,但你想知道它们在那里),但如果它们按目录列出,那么它可能更容易看到一瞥。我可以编写一个脚本,对所有classXXX进行grep,然后再次搜索所有实例,但必须忽略定义该类方法的cpp文件的结果。这也令人难以置信慢-O(N^2)代码库中类的数量代码覆盖工具在这里并不是一个真正的选择,因为它有一个GUI,不能以编程方式轻松调用所有功能。平台是VisualSt

【C++】类与对象(四)——初始化列表|explicit关键字|static成员|友元|匿名对象

前言:初始化列表,explicit关键字,static成员,友元,匿名对象文章目录一、构造函数的初始化列表1.1构造函数体内赋值1.2初始化列表二、explicit关键字三、static成员四、友元4.1友元函数4.2友元类五、内部类六、匿名对象一、构造函数的初始化列表1.1构造函数体内赋值classDate{public: Date(intyear,intmonth,intday){ //赋值,并非初始化 _year=year; _month=month; _day=day; }private: int_year; int_month; int_day;};构造函数调用之后,在函数体

c++ - VC++ 警告 C4356 : static data member cannot be initialized via derived class

以下代码发出此警告,但它似乎工作正常,因为A::st和B::st都已初始化并且实际上代表相同的字符串。据我了解,这是格式错误的代码,不应编译(我检查了clang)。我想知道为什么VC++不发出错误而是发出警告?#include#includeclassA{public:staticconststd::stringst;};classB:publicA{};conststd::stringB::st="abcd";//warningC4356:'A::st':staticdatamembercannotbeinitializedviaderivedclassintmain(){std::

c++ - 在 CUDA 源文件上使用 clang-tidy

存在多种专为C/C++设计的静态分析工具,但它们对于测试CUDA源代码并不是特别有用。自clangversion6能够编译CUDA,我想使用clang-tidy检查我的选项,它似乎没有切换架构的选项。有没有办法让它工作?例如用于打开CUDA解析器的编译时开关、自定义检查形式的扩展,或者它可能是计划中的功能? 最佳答案 基于clang的工具的一个问题是它们不以与clang完全相同的方式解析文件。第一个问题是,与C/C++编译不同,CUDA编译对源码进行了多次编译。默认情况下,当您给它一个CUDA文件时,clang会创建多个编译作业,并

c++ - 海湾合作委员会 : Specifying static/dynamic libraries to build against

我有一个简单的C++项目,其结构如下:-一个基础项目(即:包含main()),以及针对其他所有内容的链接--一些自定义库,它们都是作为静态库构建的(即:.a文件)---其中一个静态库使用共享目标文件(即:.so文件)中的功能因此,例如,在所有初始编译完成后,项目在链接时将如何显示(在TreeView中):-myApp(themainapplication)--libaudio.a(theaudiolibraryImade)--libnetwork.a(thenetworkinglibraryImade)--libvideo.a(thevideolibraryImade)--libboo

c++ - 如何使用 static_cast 安全地识别和释放这个 c++ 对象?

在其他Objective-C类中,我在下面的c++类中调用代码。有时fSound对象不是FMOD::Sound对象,它在被释放时会崩溃。在释放之前如何确认fSound对象是正确的类型?-(void)unloadSound:(FMOD::Sound*)fSound{FMOD_RESULTresult=FMOD_OK;FMOD::Sound*soundEffect=static_cast(fSound);if(soundEffect){soundEffect->release();}soundEffect=NULL;fSound=NULL;} 最佳答案

c++ - cppdepend。问题?发行说明?社区?支持?

我发现了一个用于分析大型项目的cppdepend工具。但据我所知,它存在一些问题。例如,主要和关键(对我而言)是一些依赖项,我自己在代码中看到的,cppdepends没有看到并告诉元素彼此独立。正如我所见,问题出在C++代码中的模板和宏附近。所以我试图找到一种方法来避免这个问题,也许我可以帮助cppdepend看到这个依赖关系。谷歌搜索对我没有帮助。我没有找到任何社区/论坛/群组/博客,开发人员(包括来自cppdepend团队的)可以在其中讨论此工具以找到他们问题的答案。最近的博客、问题报告的日期是2010。此外,官方网站不包含任何发行说明、错误报告、“新功能”列表。令人难以置信的是,

c++ - 什么时候必须/应该使用 dynamic_cast 而不是 static_cast?

我想知道什么时候dynamic_cast必须或应该在static_cast上使用,并提供示例。我读过thisSOquestion,但它并没有真正提供任何具体的例子。我假设大多数示例都涉及多态类类型。目前我知道在static_cast上使用dynamic_cast的唯一原因是我不能100%确定我正在使用的具体类型。一些其他的想法:横向转换(在多重继承中)在虚拟继承层次结构中转换为基类在使用多重继承的类中转换到“最右边”的继承类型时,指针会改变(如果使用static_cast)吗?“如果类型未知”是唯一的原因吗?如果不是,有人可以提供示例来说明为什么必须或应该使用dynamic_cast而