草庐IT

c++ - C/C++ 编译器如何处理具有不同值范围的类型之间的类型转换?

如何在编译器内不丢失数据的情况下进行类型转换?例如:inti=10;UINTk=(UINT)k;floatfl=10.123;UINTufl=(UINT)fl;//datalosshere?char*p="StackoverflowRocks";unsignedchar*up=(unsignedchar*)p;编译器如何处理这种类型转换?一个显示位的低级示例将不胜感激。 最佳答案 首先请注意,强制转换是将一种类型的值转换为另一种类型的值的显式请求。强制转换也总是会产生一个新对象,它是强制转换运算符返回的临时对象。但是,转换为引用类型

c++ - 将 (void*) 转换为 std::vector<unsigned char>

我有一个(void*)我需要转换为std::vector的缓冲区在我可以传递它之前。不幸的是,我的C++类型转换技能有点弱。有什么建议吗? 最佳答案 您将需要缓冲区的长度。一旦你这样做了,我们就可以这样做:unsignedchar*charBuf=(unsignedchar*)voidBuf;/*createavectorbycopyingoutthecontentsofcharBuf*/std::vectorv(charBuf,charBuf+len);好的,评论让我开始了解我为什么不使用reinterpret_cast:InC+

c++ - 将 (void*) 转换为 std::vector<unsigned char>

我有一个(void*)我需要转换为std::vector的缓冲区在我可以传递它之前。不幸的是,我的C++类型转换技能有点弱。有什么建议吗? 最佳答案 您将需要缓冲区的长度。一旦你这样做了,我们就可以这样做:unsignedchar*charBuf=(unsignedchar*)voidBuf;/*createavectorbycopyingoutthecontentsofcharBuf*/std::vectorv(charBuf,charBuf+len);好的,评论让我开始了解我为什么不使用reinterpret_cast:InC+

c++ - C/C++ 中整数类型别名的标准保证?例如。 : Is "unsigned" always equal to "unsigned int"?

第一个问题:“无符号”总是与“无符号整数”相同吗?“signed”总是与“int”相同吗?“short”总是与“signedshort”相同吗?是……第二个问题:如果C/C++标准规定了上述问题的答案,哪些段落与这些问题相关? 最佳答案 是的,这些都是有保证的。在C++11中,请参阅§7.1.6.2[dcl.type.simple]/table10,其中列出了所有简单类型说明符(及其组合)及其含义。例如,该表包括以下内容:unsigned=>unsignedintunsignedint=>unsignedintsigned=>int

c++ - C/C++ 中整数类型别名的标准保证?例如。 : Is "unsigned" always equal to "unsigned int"?

第一个问题:“无符号”总是与“无符号整数”相同吗?“signed”总是与“int”相同吗?“short”总是与“signedshort”相同吗?是……第二个问题:如果C/C++标准规定了上述问题的答案,哪些段落与这些问题相关? 最佳答案 是的,这些都是有保证的。在C++11中,请参阅§7.1.6.2[dcl.type.simple]/table10,其中列出了所有简单类型说明符(及其组合)及其含义。例如,该表包括以下内容:unsigned=>unsignedintunsignedint=>unsignedintsigned=>int

C++ 将多种类型推送到 vector 上

注意:我知道之前有人在SO上问过与此类似的问题,但我发现它们没有帮助或很清楚。第二点:对于这个项目/任务的范围,我尽量避免使用第三方库,例如Boost。我正在尝试查看是否有一种方法可以让单个vector在其每个索引中保存多种类型。例如,假设我有以下代码示例:vectorvec;intx=3;stringhi="HelloWorld";MyStructs={3,"Hi",4.01};vec.push_back(x);vec.push_back(hi);vec.push_back(s);我听说过vector可以工作,但是内存分配会变得很棘手,如果插入某个索引的值比预期的大,附近内存中的某些

C++ 将多种类型推送到 vector 上

注意:我知道之前有人在SO上问过与此类似的问题,但我发现它们没有帮助或很清楚。第二点:对于这个项目/任务的范围,我尽量避免使用第三方库,例如Boost。我正在尝试查看是否有一种方法可以让单个vector在其每个索引中保存多种类型。例如,假设我有以下代码示例:vectorvec;intx=3;stringhi="HelloWorld";MyStructs={3,"Hi",4.01};vec.push_back(x);vec.push_back(hi);vec.push_back(s);我听说过vector可以工作,但是内存分配会变得很棘手,如果插入某个索引的值比预期的大,附近内存中的某些

C++11 : Are there reasons why some Regular Types should not have `std::hash` specialised?

对于常规类型,我的意思是编程元素中Stepanov的定义,基本上,有相等的概念,并且相互复制的对象比较相等。所以当你有一个常规类型T,并且等式关系是传递的(a==b&&b==c=>a==c),可以定义一个(non-trivial)散列函数这与相等的定义一致(a==b=>h(a)==h(b))。总是。但标准中并没有很多std::hash专业。例如。std::complex没有,容器也没有,vector除外。和bitset.所以我想知道这里的设计原则是什么。或者,换个方式问:有理由不提供std::hash您自己的类型的特化,只要它们是常规的并且相等是可传递的?

C++11 : Are there reasons why some Regular Types should not have `std::hash` specialised?

对于常规类型,我的意思是编程元素中Stepanov的定义,基本上,有相等的概念,并且相互复制的对象比较相等。所以当你有一个常规类型T,并且等式关系是传递的(a==b&&b==c=>a==c),可以定义一个(non-trivial)散列函数这与相等的定义一致(a==b=>h(a)==h(b))。总是。但标准中并没有很多std::hash专业。例如。std::complex没有,容器也没有,vector除外。和bitset.所以我想知道这里的设计原则是什么。或者,换个方式问:有理由不提供std::hash您自己的类型的特化,只要它们是常规的并且相等是可传递的?

静态成员函数中封闭类的 C++ 类型

我认为这是完全不可能的,但如果。是否有可能在任何版本的C++中以某种方式在静态成员函数中获取封闭类的类型?classImpossible{public:staticvoidFun(){typedefImpossibleEnclosingClass;//nowdosomethingwithEnclosingClass...}}有没有办法在函数中不写类名的情况下获取封闭类的类型(本例中为Impossible)?我之所以这样做是为了避免在函数中重复类名。如果发生这种情况,很容易导致难以找到复制粘贴错误:classSomeOther{//anotherclass,withthesameinte