草庐IT

lint-results

全部标签

c++ - std::result_of 应用于 const 重载方法

如果我给typedefstd::vectorv;然后下面可以用来捕获常量迭代器的类型(另一种方法是使用v::const_iterator,但这取决于const_iterator成员类型在类中明确定义。typedeftypenamestd::result_of::typeconst_iterator;确实,我们可以检查上面的内容是否如我们所愿。static_assert(std::is_same::value);但是,我发现下面的编译器失败。typedeftypenamestd::result_of::typeiterator;编译器提示该方法被重载(通过const修饰符)并且无法明确解

c++ - 有没有人有使用 pc-lint 的好技巧?

使用pc-lint的一些最佳实践是什么——如何应对无数的选择?我对读取/解析输出文件的更好方法特别感兴趣。 最佳答案 有一个VisualLint建立在PC-Lint的基础上,使消息更加友好。不幸的是,它不是免费的,只能在带有VisualStudio的Windows上运行。他们有试用版IIRC。See由于我当时的雇主是个小气鬼,所以我没有得到完整版,尽管我确实觉得它很有用。 关于c++-有没有人有使用pc-lint的好技巧?,我们在StackOverflow上找到一个类似的问题:

c++ - 如何使用 make 运行增量 PC-Lint

我想使用Make以增量方式将GimpelPC-Lint应用到我的源代码。我希望它仅在源文件自上次运行lint后发生更改时才对源文件运行lint。有人这样做吗?你是如何接近它的? 最佳答案 常见的模式是创建输出(如果没有,则创建人工输出)。编辑注意$(LINT)$$@将扩展为类似linttest.cpp>test.lint的内容(将输出重定向到该文件)例如%.o:%.cpp|%.lintS(CC)-o$@$(CPPFLAGS)$$@或者对于没有输出的过程:%.o:%.cpp|%.emailsentS(CC)-o$@$(CPPFLAGS

c++ - result_of 对我不起作用

#includeusingnamespacestd;structasd{voidf();};intf();typedeftypenameresult_of::typeresult_free;typedeftypenameresult_of::typeresult_mem;两个typedef都报错Infileincludedfrom../main.cpp:1:0:/usr/include/c++/4.6/type_traits:Ininstantiationof‘std::_Result_of_impl’:/usr/include/c++/4.6/type_traits:1215:12:

c++ - 将pugixml的result.offset转换为column/line

我需要为使用pugixml的应用程序提供用户友好的错误报告。我目前正在使用result.offset。有没有办法获取行和列?我可能会处理大型XML文件,如果这有所不同的话。 最佳答案 此功能在pugixml中不容易使用,因为在每次解析时执行此操作的成本相对较高,并且在解析完成后,在一般情况下不可能恢复文件/行信息。这是一个构建偏移量->线映射的片段,您可以在解析失败或出于其他原因需要该信息时使用它;随意调整文件I/O代码以满足您的要求。typedefstd::vectoroffset_data_t;boolbuild_offset_

c++ - Lint 更喜欢 std :string rather than clear() 上的 erase() 方法

使用Lint,它反复反对在std字符串上使用clear,并希望建议使用不带参数的删除方法。查看文档并执行我想要的操作,即将字符串的大小调整为零个元素,以便该字符串为空且没有任何元素。此时我不想删除字符串,只需从中删除所有成员即可。我的问题是这两种方法有什么区别,有谁知道我应该使用erase而不是clear方法的原因吗? 最佳答案 我看不出任何原因。恰恰相反:我实际上不得不查看引用以查看erase()是否可以在没有参数的情况下调用。erase()用于从字符串中删除一些指定的字符。clear()用于删除字符串的全部内容(但不包括其容量)

c++ - 使用 std::result_of 确定模板参数的返回类型

我认为这段代码是不言自明的,但基本上模板函数ExecFunc应该能够执行另一个函数并返回其结果。我知道我可以使用decltype而不是result_of获得类似的结果,但这个问题是为了理解为什么我写的东西不起作用:该片段无法在gccv4.9.2上编译。这是我的:#includeintf(inti){returni;}templateautoExecFunc(Ff,Targ)->typenamestd::result_of::type{returnf(arg);}intmain(){autoa=ExecFunc(f,3);return0;}这是编译器的输出:prova.cpp:Infun

c++ - C 和 C++ 的结构定义不同——它安全吗? PC-Lint 警告

以下声明在C++文件中添加了几个用于编译的运算符。该定义包含在C和C++文件中。PC-Lint报告错误114:标记“Rect”的结构声明不一致,但我确信它是安全的。我正在使用VisualStudio2008进行编译。编辑-添加我发送给客户的解释关于Rect问题;知道结构在C和C++中的大小相同如何消除对“未定义行为”的怀疑。如果字段在数据结构中的实际位置因编译而异,则会出现未定义的行为。您必须将所有成员变量访问视为最终解析为指针,该指针由指向对象存储开头的指针加上偏移量(取决于该结构中的内容)计算得出。打包和数据对齐设置会影响偏移值。允许编译器对类型重新排序以实现最佳访问-假设仅仅因为

c++ - 最烦人的解析 : why doesn't `g( ( f() ) );` call `f` 's default constructor and pass the result to `g` 's ctor that takes a `f` ?

这不是Mostvexingparse:whydoesn'tAa(());work?的拷贝,它基于Aa());形式的解析,其OP认为可以使用额外的集合默认构造一个A对象括号。相比之下,我的问题是关于2个类,f和g,其中f具有默认构造函数,而g的构造函数采用f。我想用一个临时的f参数调用g的构造函数,而不使用统一的初始化语法。g的构造函数中有一个std::cout语句,因此缺少输出表示函数声明而不是g对象实例化。我在注释中用3个数字注释了示例代码。#1和#2编译时#3被注释掉,反之亦然:#includestructf{};structg{g(f){std::cout#1:我认为#1声明了一

c++ - VS 编译警告 : result of 32-bit shift implicitly converted to 64 bits

VisualStudio2013发出恼人的(看似无关紧要的)编译警告:#include#definePRECISION16uint64_thi=0;for(uint8_ti=0;i这是编译警告:warningC4334:'改1好像解决了至1.所以我一直在尝试找出1中可能出现的问题.显然,如果i>=PRECISION,那么左移操作将产生未定义的行为。但是,变量i不超过PRECISION-1的值.此外,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与左移操作数导致的潜在未定义行为有什么关系。也许它假定PRECISION-1-i的无符号值可以大于31。但是我应该如何告诉编译器它