草庐IT

c++ - 为什么 "unsigned int ui = {-1};"是缩小转换错误?

标准§8.5.4/7解释了什么是缩小转换:Anarrowingconversionisanimplicitconversion—fromafloating-pointtypetoanintegertype,or—fromlongdoubletodoubleorfloat,orfromdoubletofloat,exceptwherethesourceisaconstantexpressionandtheactualvalueafterconversioniswithintherangeofvaluesthatcanberepresented(evenifitcannotberepres

C++ 将 long、short 和所有 int 转换为 uint32_t、int32_t 等等有帮助吗?

我运行着一个使用C++编码的游戏服务器,其中还有一些ASM和C。我看到有人更新了我运行的同一台服务器,在所有更新中,所有int、unsigned、short和其他所有内容都已更改为int32_t、uint32_t、uint64_t和其他内容。全部改成上面说的有什么好处吗?假设我将所有int更改为int32_t,并将所有unsignedint更改为uint32_t,当然还有所有其他可能更改的内容。我试图阅读和理解是否有任何好处,但我根本没有理解它们的真正含义。所以,是的,问题是:按照我刚才所说的去做有什么好处吗?我使用的编译器是OrwellDev-C++ 最佳

c++ - std::list<int> 的默认构造函数可以抛出吗?

我(快速)查看了C++标准和在线C++引用,但找不到这个简单问题的答案:可以std::list的默认构造函数吗?扔?如果是这样,为什么会抛出? 最佳答案 简短回答:它可以,但它可以以相当安全的方式实现:默认构造函数构造了一个空列表,因此几乎不需要在进程中实际分配内存。大多数列表实现不会为空列表分配任何内存。但是,默认构造函数不是真正默认构造函数,因为它有一个默认参数:explicitlist(constAllocator&=Allocator());Allocator本身是一个模板参数,因此如果Allocator有一个足够笨(或复杂

c++ - 在 switch 语句中从 int 到 enum 类的隐式转换

enumclasspid{Alpha,Beta,Gamma};intmain(){intpropId=2;switch(propId){casepid::Alpha:casepid::Beta:casepid::Gamma:break;}}以上片段在msvc2012中编译良好(并且有效)但在clang-3.4和g++-4.8中失败。这些需要static_cast(propId)在switch子句中使用。顺便说一下,没有显式转换的简单赋值,例如pida=propId;在每个编译器中给出错误。谁做对了? 最佳答案 标准第4条,“标准转换

C++:如何阻止编译器使用大模板参数发送垃圾邮件错误?

在我的C++代码中,它在很大程度上依赖于模板元编程,我有类似的东西:templatestructMyClassConfig{staticintconstFoo=TFoo;staticintconstBar=TBar;staticintconstBaz=TBaz;staticintconstQux=TQux;usingSpam=TSpam;};templateclassMyClass{...};也就是说,我使用虚拟类来包含各种参数。在这里,通常有很多嵌套,所以MyClassConfig::Spam又可以是这样的配置类。这一切都有效,直到编译器(g++)决定它不喜欢我的代码。此时它会愉快地

c++ - unordered_map<const T, int> 和 map<const T, int> 的区别

#include#include#includeusingnamespacestd;classSolution{public:private://unordered_mapmapStrInt;//Case1:OK//unordered_mapmapStrInt;//Case2:Fail//mapmapStrInt;//Case3:OK//mapmapStrInt;//Case4:OK};问题>为什么Case2不合法?template,//unordered_map::hasherclassPred=equal_to,//unordered_map::key_equalclassAllo

c++ - 解决 VC++12 中的模板特化错误?

我有一些为Clang3.2编写的代码,我正试图将其移植到VC++12中运行。Clang3.2+和GCC4.8没有问题,但VC++12有问题。这是产生问题的最小片段:templateclassfoo{};templateintReturnsN(){returnN;}templateclassbar{typedeffoo>fooN;};现在我很确定这是一个编译器错误(但如果不是,请告诉我!)给出的错误是:'specialization':cannotconvertfrom'int(__cdecl*)(void)'to'int(__cdecl*)(void)'那么有人知道一个体面的工作吗?编

c++ - 为什么 boost uniform_int_distribution 采用封闭范围(而不是半开放范围,遵循常见的 C++ 用法)?

标题说明了一切。甚至还有一个warning在文档页面中:Warning:ContrarytocommonC++usageuniform_int_distributiondoesnottakeahalf-openrange.Insteadittakesaclosedrange.Giventheparameters1and6,uniform_int_distributioncancanproduceanyofthevalues1,2,3,4,5,or6.当C++中的常见做法是使用开放范围[begin,end)时,为什么要这样做? 最佳答案

c++ - 莱曼算法没有意义

我尝试实现Lehmann测试,但第一次没有成功。我按照大家的描述计算r=[a^((p-1)/2)]modp如果r不是1或–1,则p肯定不是素数。如果r=1或–1,则p不是素数的可能性最多为50%。无论我怎么做,都行不通。我什至尝试对其进行硬编码p=7;//definitelyaprimenumberdoublee=(p-1)/2;intf=(int)pow(3,e)%p;coutf最终为6任何帮助将不胜感激 最佳答案 通过计算f,您已经完成了第1步,但您遗漏了第2步和第3步。p=7;//definitelyaprimenumberd

c++ - 继承自std::vector,编译错误? (最烦人的解析)

对于看到这个问题的人:查看答案并考虑使用:cdecl为什么下面的代码会出现编译错误:prog.cpp:Infunction‘intmain()’:prog.cpp:23:4:error:requestformember‘size’in‘a’,whichisofnon-classtype‘RangeVec(RangeVec)’a.size();^我不明白这段代码有什么问题?#include#includetemplateclassRangeVec:publicstd::vector{public:RangeVec(constRangeVec&v):std::vector(v){}Rang