草庐IT

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 std::is_const<const int&>::value 评估为 false?

这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果

c++ - 为什么这会导致 C2102 : '&' requires l-value

我在想,为什么下面这样的代码(已经注释掉了)会导致C2102:“&”需要左值是否有更好的方法来避免使用tmp变量?classa{private:int*dummy;public:int*get_dummy()const{returndummy;}};intmain(){aaa;//errorC2102:'&'requiresl-value//int**me=&(aa.get_dummy());//OK!int*tmp=aa.get_dummy();int**me=&(tmp);} 最佳答案 因为a::get_dummy()返回一个未

c++ - 如何读取 C++ 中硬编码地址的值?

我想读取位于地址302H中的值。目的是从硬件(104pc堆栈的一部分)读取输入。当我运行以下代码时出现此错误:setOutput.exe中0x004134b9处未处理的异常:0xC0000005:访问冲突读取位置0x00000302。#include#definePORTBASE0x302int_tmain(intargc,char*argv[]){intvalue;intvolatile*port=(int*)PORTBASE;printf("port=%d\n",port);value=*port;printf("portvalue=%d\n",value);}编辑:我在widow

c++ - 我如何定义一个模板类来给出类型的指针深度/级别?

我如何定义一个模板类,它提供一个整数常量,表示作为输入模板参数提供的(指针)类型的“深度”?例如,如果类名为Depth,则以下内容为真:Depth::value==3Depth::value==0 最佳答案 templatestructpointer_depth_impl{enum{value=0};};templatestructpointer_depth_impl{enum{value=pointer_depth_impl::value+1};};templatestructpointer_depth{enum{value=po

c++ - 将 ruby​​ 解决方案移植到 C++

有没有办法在C++中做到这一点,尤其是范围部分。answer=(0..999).select{|a|a%3==0||a%5==0}putsanswer.inject{|sum,n|sum+n}我已经创建了自己的C++解决方案,但使用了更标准的for循环,想知道是否有更酷的方法来实现它? 最佳答案 模板元编程解决方案:以下假定范围的下限为0。templatestructsum{staticconstintvalue=sum::value+(N%3==0||N%5==0?N:0);};templatestructsum{staticco

c++ - const void * 相对于 void * 提供什么值(value)?

在C++中,使用constvoid*作为函数的参数类型是否比void*更有值(value)?由于void*是不透明的,是否存在任何修改风险,除非用户执行reinterpret_cast,在这种情况下他们同样可以执行const_cast在constvoid*上,因此真的可以买任何东西吗?我问是因为我正在为共享指针使用实用程序模板类,它提供了void的专门化以避免void&问题,但没有为constvoid因此我想知道这是否只是一个疏忽,还是永远不需要它? 最佳答案 它提供了与const在其他指针类型上提供的相同的好处:除非您明确放弃co

c++ - valgrind Conditional jump or move depends on uninitialised value(s) ,这是否表示内存泄漏?

我在代码中遇到内存泄漏问题,在它运行时,堆不断增加到最大值,我需要重新启动服务,我运行了top命令,看到每当我调用一个场景时堆都在增加服务。我用valgrind运行服务,valgrind--log-file=log-feb19.txt--leak-check=full--show-reachable=yes--track-origins=yesmyservice我在运行场景时没有看到任何明显丢失或可能丢失的block,但我看到很多条件跳转或移动取决于未初始化的值错误。这些是否算作内存泄漏?我得到的例子:==27278==Conditionaljumpormovedependsonuni

c++ - 如何从模板参数(std::vector 和普通指针)中提取 value_type?

我有一个带有以下接口(interface)的排序:templatevoidmy_sort(RandomItfirst,RandomItlast){}我希望RandomIt成为std::vector.begin()/end()的迭代器或普通指针类型T*first,T*last.我想如果我假设RandomIt是一个vector,我可以从RandomIt::value_type得到它,但这不适用于T*first,T*last.我的问题是,如何提取value_typeT在这两种情况下都来自模板参数? 最佳答案 使用iterator_trai

具有任意类型值的 C++ 关联数组

在C++中为每个键创建一个具有任意值类型的关联数组的最佳方法是什么?目前我的计划是创建一个“值”类,其中包含我期望的类型的成员变量。例如:classValue{intiValue;Value(intv){iValue=v;}std::stringsValue;Value(std::stringv){sValue=v;}SomeClass*cValue;Value(SomeClass*v){cValue=c;}};std::maptable;这样做的缺点是您在访问“值”时必须知道类型。即:table["something"]=Value(5);SomeClass*s=table["som