草庐IT

gravity_value_t

全部标签

c++ - 警告 C4800 : 'int' : forcing value to bool 'true' or 'false' (performance warning)

我的代码中有这个问题:boolCBase::isNumber(){return(id&MID_NUMBER);}boolCBase::isVar(){return(id&MID_VARIABLE);}boolCBase::isSymbol(){return(id&MID_SYMBOL);} 最佳答案 仅供引用:强制转换不会隐藏警告bydesign.类似return(id&MID_NUMBER)!=0;应该明确说明“我要检查这个值是否为零”并让编译器高兴 关于c++-警告C4800:'in

c++ - if (mask & VALUE) 还是 if ((mask & VALUE) == VALUE)?

您可能熟悉enum位掩码方案,例如:enumFlags{FLAG1=0x1,FLAG2=0x2,FLAG3=0x4,FLAG4=0x8,NO_FLAGS=0,ALL_FLAGS=FLAG1|FLAG2|FLAG3|FLAG4};f(FLAG2|FLAG4);我见过很多代码,然后测试掩码中的某个位,例如if((mask&FLAG3)==FLAG3)但这不就相当于这个吗?if(mask&FLAG3)使用第一个版本有什么理由吗?在我看来,第二个较短的版本更清晰。可能是C程序员遗留下来的习惯,他们认为应该将真值转换为1?(虽然即使在那里,较长的版本在赋值或return语句中比在条件语句测试中更

c++ - 为什么 GCC 说 "named return values no longer supported"?

我不小心把函数定义的左大括号放在了return语句之后intid(intk)returnk;{}但是GCC回答了一个奇怪的错误消息error:namedreturnvaluesarenolongersupported谁能解释一下这个奇怪的功能是什么?我从来没有听说过。 最佳答案 见here-通过在函数头中显式定义命名返回值来实现早期NRVO。添加了对没有此扩展的NRVO的原生支持here-GCC3.1发布系列。上下文的简要剪切和粘贴:G++nowsupportsthe"namedreturnvalueoptimization":fo

c++ - 当我们定义模板时总是定义 `value_type` 是一个好习惯吗

templateclassPoint{public:typedefTvalue_type;...};上面的代码我在书"C++inaNutshell"byRayLischner,pp176看过.问题:总是添加value_type的定义是一种好习惯吗??这将在哪里定义value_type可以用吗?例如:Point::value_type? 最佳答案 拥有它并没有什么坏处,但它主要只对容器有意义(如std::vector),因为所有容器都提供此typedef和一个用于访问所包含值的统一接口(interface)(begin/end,fro

c++ - LNK2038 : mismatch detected for 'RuntimeLibrary' : value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file. 对象

我正在将Matlab、C和Cuda集成到一个项目中。我使用Matlabmix为了将用c编写的matlabmx函数与cuda运行时库连接起来,出现关于c文件和库之间的静态发布和动态发布冲突的链接错误。谁能解决这个问题?errorLNK2038:mismatchdetectedfor'RuntimeLibrary':value'MT_StaticRelease'doesn'tmatchvalue'MD_DynamicRelease'infile.obj. 最佳答案 当您静态将项目与库(通常是扩展名为.lib的文件)链接但您的Visual

C++ View 类型 : pass by const& or by value?

这在最近的代码审查讨论中提出,但没有令人满意的结论。有问题的类型类似于C++string_viewTS。它们是围绕指针和长度的简单非拥有包装器,装饰有一些自定义函数:#includeclassfoo_view{public:foo_view(constchar*data,std::size_tlen):_data(data),_len(len){}//memberfunctionsrelatedtoviewingthe'foo'pointedtoby'_data'.private:constchar*_data;std::size_t_len;};出现的问题是,是否有一个论点是更喜欢通

c++ - std::is_unsigned<bool>::value 定义是否明确?

我想知道是否std::is_unsigned::value是否按照标准定义好?我问这个问题是因为typenamestd::make_unsigned::type没有很好的定义。 最佳答案 bool没有签名的概念.来自[basic.fundamental]/6:Valuesoftypeboolareeithertrueoffalse.[Note:Therearenosigned,unsigned,short,orlongbooltypesorvalues.—endnote]Valuesoftypeboolparticipateinin

c++ - pass-by-value-and-then-move 结构是一个坏习惯吗?

由于我们在C++中有move语义,现在通常这样做voidset_a(Aa){_a=std::move(a);}原因是,如果a是一个右值,则拷贝将被省略,并且只有一步。但是如果a是左值会发生什么?似乎会有一个复制构造,然后是一个move赋值(假设A有一个正确的move赋值运算符)。如果对象具有太多成员变量,则move分配的成本可能会很高。另一方面,如果我们这样做了voidset_a(constA&a){_a=a;}只有一份拷贝分配。如果我们要传递左值,我们可以说这种方式优于按值传递的习惯用法吗? 最佳答案 昂贵的move类型在现代C+

c++ - 为什么在 Herb Sutter 的 CppCon 2014 演讲中不推荐使用值(value) setter 成员函数(回到基础 : Modern C++ Style)?

在HerbSutter的CppCon2014演讲中回归基础:现代C++风格,他在幻灯片28(awebcopyoftheslidesarehere)中提到了这种模式:classemployee{std::stringname_;public:voidset_name(std::stringname)noexcept{name_=std::move(name);}};他说这是有问题的,因为当使用临时调用set_name()时,noexcept-ness并不强(他使用短语“noexcept-ish”)。现在,我在我自己最近的C++代码中大量使用了上述模式,主要是因为它可以让我每次都输入两个s

typescript - 'value' 类型的值不存在属性 'HTMLElement'

我正在玩typescript,并试图创建一个脚本,该脚本将在输入框中输入文本时更新p元素。html如下所示:还有greeter.ts文件:functiongreeter(person){return"Hello,"+person;}functiongreet(elementId){varinputValue=document.getElementById(elementId).value;if(inputValue.trim()=="")inputValue="World";document.getElementById("greet").innerText=greeter(input