草庐IT

Count-IF

全部标签

python - 解析 C++ 预处理器 #if 语句

我有一个带条件编译的C/C++源文件。在我将它发送给客户之前,我想删除大部分#if语句,这样我的客户就不必担心将正确的-D选项传递给编译器。我已经在Python中实现并工作了,但它只能正确处理#ifdef和#ifndef语句。我需要添加对#if语句的支持,但#if的语法要复杂得多。(例如,您可以使用&&、||、!、括号、关系运算符、算术等)。是否有任何现有的开源代码来解析和评估#if语句?(最好使用Python)。我所知道的唯一实现是GCC,这对于这项任务来说太复杂了。 最佳答案 作为KeithBsaid,你可以让预处理器为你做这件

C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

我有这个编译时没有出现来自visualstudio的错误“fatalerrorC1017:无效整数常量表达式”。我该怎么做?templateA*Create(){#ifsizeof(B)>sizeof(A)#errorsizeof(B)>sizeof(A)!#endif...} 最佳答案 预处理器不理解sizeof()(或数据类型、标识符、模板或类定义,它需要理解所有这些东西才能实现sizeof)。您正在寻找的是静态断言(由编译器强制执行,它理解所有这些事情)。我用Boost.StaticAssert为此:templateA*Cre

c++ - 将函数放在 if 语句中是否有效? (C++)

我见过这样的说法if(SomeBoolReturningFunc()){//dosomestuff//dosomemorestuff}我想知道将函数放在if语句中是否有效,或者是否存在将它们分开会更好的情况,就像这样boolAwesomeResult=SomeBoolReturningFunc();if(AwesomeResult){//dosomeother,moreimportantstuff}...? 最佳答案 我不确定是什么让您认为首先将表达式的结果分配给变量会比评估表达式本身更有效,但这永远不会重要,因此请选择增强您的可读

c++ - 隐藏参数 C++ 的有趣案例(参数未在 if block 中隐藏)

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我今天惊讶地发现下面的代码是完全有效的(gcc4.4.5):intget_int(constint&i){if(i==0){inti=1;returni;}returni;}我真的很惊讶。如果我必须接受它,那么我可以肯定地说它是有道理的,因为新变量在它自己的block中,所以外部的其余代码仍然可以访问该参数,因此该参数并没有真正被隐藏。但这对我来说仍然没有

C#/命令行界面 : Destructor not called if Dispose() used in it

我有一个名为“CTransferManaged”的C++/CLI类,其中实现了终结器和析构函数:CTransferManaged::~CTransferManaged(){this->!CTransferManaged();}CTransferManaged::!CTransferManaged(){//Cleanupresources...}此类由名为“CTransfer”的C#类包装,其中包含类型为CTransferManaged的​​对象m_transfer。如果此类的析构函数仅清除对对象m_transfer的引用,我可以看到调用了析构函数(命中断点):~CTransfer(){

c++ - 使用 const 键类型引用调用 std::set of pointers 的 count 方法

我有一个类structS{boolfoo(constAType&v)const{returnvalues.count(&v);//compileerrorduetotheconstnessofv}private:std::setvalues;};这是一个简化版本。在实际代码中,foo做了一些复杂的事情。代码产生错误invalidconversionfrom‘constAType*’to‘std::set::key_type{akaAType*}’我认为foo应该采用'constAType&v'因为它不会改变v。成员变量“values”的类型不能为std::set,因为结构S的某些方法调

c++ - 将成员声明与 enable_if 一起使用?

我需要有条件地使用成员声明。templatestructB;templatestructB{voidfoo();};templatestructB{};templatestructA:publicB::value>{usingB::value>::foo();voidfoo(int){}};这显然行不通,因为B::foo没有定义在一半的情况下。我怎样才能做到这一点?拥有B::foo()在A中可见foo(int)旁边的作用域?感谢帮助 最佳答案 这是我的解决方案。我敢肯定它不会是最好的,但它可以完成工作。structA{voidfoo

c++ - valarray 上 STL 算法 "count"的返回类型是什么

我正在使用VisualStudio2010Pro在Windows764bit上机器,我想使用count(来自header)在valarray上:intmain(){valarrayv(false,10);for(inti(0);i上面程序的输出是正确的:4但是我想将值分配给变量并使用int导致编译器警告精度损失。自valarray没有迭代器,我不知道如何使用iterartor::difference_type.这有可能吗? 最佳答案 Num的正确类型会是:typenameiterator_traits::difference_typ

c++ - noexcept 运算符和 enable_if_t : do they work together?

考虑以下类:structS{templatestd::enable_if_t::value>f()noexcept{}templatestd::enable_if_t::value>g()noexcept{}};正如预期的那样,编译:s.f();这个不是:s.g();令我困惑的是,下面的main是用GCC(6.2)编译的,而不是用clang(3.9)编译的:intmain(){static_assert(noexcept(&S::f),"!");static_assert(noexcept(&S::g),"!");}我会说第二个断言失败是因为特化无效。两个编译器不同意这一点。哪个是正确

html和嵌套if语句

我将代码简化为基础知识,并遇到了相同的错误。!DOCTYPEhtml>NewPage}看答案尝试这个NewPage';}}}}else{$_SESSION['MEMID']='';$_SESSION['Password']='';$_SESSION['MemName']='';}?>**修改:-**重定向到另一页,然后替换此页面if($_SESSION['Password']==$_POST['Password']){echo'NewPage';}有了这个if($_SESSION['Password']==$_POST['Password']){echo'location.href="inde