草庐IT

c++ - 取消引用字符串迭代器产生 int

我收到这个错误comparisonbetweenpointerandinteger('int'and'constchar*')对于下面的代码#include#include#includeusingnamespacestd;intmain(){std::strings("teststring");for(autoi=s.begin();i!=s.end();++i){cout为什么取消引用字符串迭代器会产生int而不是std::string? 最佳答案 实际上,它不会产生int,它会产生char(因为字符串迭代器会迭代字符串中的字符

c++ - std::is_signed 不适用于强类型枚举:int

谁能解释一下,为什么#include#includeusingnamespacestd;enumE:signedint{a=-1,b=1,};intmain(){std::cout()std::is_signed不做,锡上写的是什么?谢谢... 最佳答案 如果我们查看is_signed的文档它说:IfTisasignedarithmetictype,providesthememberconstantvalueequaltrue.Foranyothertype,valueisfalse.并且枚举不是算术类型,因此结果应该为假。来自C+

c++ - 为什么这个编译: string = int

假设如下代码:#include#includeintfunc(){return2;}intmain(){std::stringstr("str");str=func();std::cout为什么行str=func();编译时没有类型不匹配的警告?我正在使用设置了-std=c++11标志的编译器gccv.4.7.1。输出:获取的值:'' 最佳答案 std::string类包含一个重载的operator=,它接受一个char值。由于char是整数类型,int可以隐式转换为char。分配给str的值不是空字符串;它是一个长度为1的字符串,

c++ - 为什么 uniform_int_distribution 是闭域而 uniform_real_distribution 是半开域?

uniform_int_distribution具有区间[a,b]但uniform_real_distribution具有区间[a,b).一个天真的方法是做类似b+0.1的事情,但是你开始进入无穷小......幸运的是正确的方法很简单:std::uniform_real_distributiondis(start,std::nextafter(stop,DBL_MAX));但为什么这是必要的?更具体地说,这两者不同的基本原理是什么? 最佳答案 [a,b)上的均匀真实分布在统计上几乎无法与分布区分[a,b].statisticaldi

c++ - std::greater<int>() 和 std::greater<int> 之间的区别?

此代码有效:#include#include#include#includeusingnamespacestd;intmain(){priority_queue,greater>pq;pq.push(1);cout但是,这段代码无法编译:#include#include#include#includeusingnamespacestd;intmain(){priority_queue,greater()>pq;pq.push(1);cout为什么?我只知道greater()是一个函数对象,priority_queue接受二元谓词作为第三个参数,谓词是一种特殊类型的仿函数。但是这对牙套是

c++ - std::multiset<int> 与 std::map<int, std::size_t> 用于保持多个可重复整数值

我想创建一个记录来保存关于的信息a)存在什么样的元素,b)出现的每种元素的数量在树的一个节点中。我会明确地只为叶节点存储这些信息,而父节点的信息可以通过组合它所有子节点的信息来获得(例如,子节点1有3个A对象,1个B对象,子节点2有1个A的对象,C的2个对象--parent有4个A的对象,1个B的对象和2个C的对象)。从父节点请求此信息时,我会小心不要先请求、使用和丢弃子节点的信息,然后再为其父节点请求,但是向上构造将是一个常见的手术。其他两个常见操作直接源self存储的内容:是否存在类型X的对象?和存在多少类型X的对象?还有如何存在多种对象?对象种类以整数表示,对象编号始终为整数值。

c++ - 什么是 typedef int var[1];做?

我遇到过以下代码:typedefintvar[1];//orvar[3]它到底有什么作用?我不明白下标添加了什么,因为现在我可以为int定义“var” 最佳答案 typedef声明使用与普通变量声明相同的语法。不同之处在于,不是声明“一个名为x的y变量”,而是声明“一个名为x的类型,它是输入y。”语法在其他方面相同。那么,让我们从您的示例中删除typedef,看看我们得到了什么:intvar[1];var是一个类型为int[1]的变量,或者说,一个int的数组。如果我们将typedef添加回去:typedefintvar[1];这使

c++ - 将键码的字符串表示形式转换为 Qt::Key(或任何 int)并返回

我想将表示键盘上的键的字符串转换为键码枚举,如Qt::Key(或其他任何东西)。示例转换为:“Ctrl”到Qt::Key_Control“向上”到Qt::Key_Up"a"到Qt::Key_A"5"到Qt::Key_5如您所见,上面不仅包括字母数字键,还包括修饰符和特殊键。我没有附加到Qt键码枚举,但Qt似乎在QKeySequence的fromString静态函数中具有此解析功能(参见thisdirectlink):QKeySequencefromString(constQString&str,SequenceFormatformat);您可能会问我为什么需要这种转换。好吧,我有一个由

C++/C int32_t 和 printf 格式 : %d or %ld?

这个问题在这里已经有了答案:printfformatspecifiersforuint32_tandsize_t(4个答案)Howtoportablyprintaint64_ttypeinC(7个答案)关闭6年前。在某些平台上,int32_t(来自stdint.h)是longint,但在其他平台上,它可能是int。当我想使用printf时,如何确定应该使用哪种格式,"%ld"或"%d"?或者,也许,我应该像下面这样强制将其转换为long:int32_tm;m=3;printf("%ld\n",(long)m);但是这个解决方案很乏味。有什么建议吗?

c++ - 声明为返回 int 的函数不返回任何内容。这是未定义的行为吗?

这是C++中的有效函数:intf(){if(false){return42;}}以下定义导致UB:intx=f();//returnvalueused问题:下面的表达式语句会导致UB吗?f();非常欢迎从标准中引用。 最佳答案 C++03§6.6.3/2:从一个函数的末尾流出相当于一个没有值的返回;这会导致值返回函数出现未定义的行为。所以这是一个函数本身的UB。顺便说一句,gcc给你一个很好的警告,指向这个UB:Infunction'intf()':Line7:warning:controlreachesendofnon-voidf