草庐IT

const_cast-ed

全部标签

c++ - 数组初始化在 C++ 中使用 const 变量

这可以工作:constintsize=2;intarray[size]={0};编译错误:inta=2;constintsize=a;intarray[size]={0};为什么? 最佳答案 因为C++委员会的人是这么决定的。技术原因是用于初始化size的第一个表达式是常量表达式,可以在编译期间计算。这意味着编译器还可以知道数组的大小,并且可以在编译时完成分配(在这种情况下,“保留”可能是一个更合适的术语)。在第二种情况下,表达式不是常量表达式(给定C++定义)并且这种还原是不可能的。在第二种情况下,值确实在size初始化时固定,这

c++ - 指向指针的 Static_cast 整数地址

为什么以下内容需要C风格的转换?int*ptr=static_cast(0xff);//error:invalidstatic_castfromtype'int'//totype'int*'int*ptr=(int*)0xff;//ok. 最佳答案 static_cast只能在两个相关类型之间进行转换。整数与指针无关,反之亦然,因此您需要改用reinterpret_cast,它告诉编译器重新解释整数的位,就好像它们是指针(反之亦然):int*ptr=reinterpret_cast(0xff);阅读以下内容了解更多详情:Typeco

c++ - const 变量的静态断言?

静态断言对于在编译时进行检查非常方便。一个简单的静态断言习惯用法如下所示:templatestructStaticAssert;templatestructStaticAssert{};#defineSTATIC_ASSERT(condition)do{StaticAssert();}while(0)这对像这样的东西很有用STATIC_ASSERT(sizeof(float)==4)和:#defineTHIS_LIMIT(1000)...STATIC_ASSERT(THIS_LIMIT>OTHER_LIMIT);但是使用#define并不是定义常量的“C++”方式。C++会让你使用匿名

c++ - 这是 const_cast 的未定义行为吗?

这个问题在这里已经有了答案:behaviorofconst_castinC++[duplicate](3个答案)关闭8年前。这里发生了什么?constinta=0;constint*pa=&a;int*p=const_cast(pa);*p=1;//undefinedbehavior??cout我的编译器输出0和1,但是“a”的地址和“p”的值是相同的,所以我很困惑这怎么可能。

c++ - reinterpret_cast to void* 不使用函数指针

我想重新解释将函数指针转换为void*变量。函数指针的类型将为Class*(*)(void*)。下面是示例代码,classTest{inta;};intmain(){Test**p(void**a);void*f=reinterpret_cast(p);}以上代码适用于VisualStudio/x86编译器。但是使用ARM编译器,它会给出编译错误。不知道为什么。Error:#694:reinterpret_castcannotcastawayconstorothertypequalifiers我阅读了Castingafunctionpointertoanothertype中的解释我担心

c++ - 数组作为 const 指针

考虑以下代码:voidIncrement(int*arr){arr++;}intmain(){intarr[]={1,2,3,4,5};//arr++//illegalbecauseitsaconstpointerIncrement(arr);//legal}我的问题是,如果arr是一个const指针,我怎么能将它发送给一个不接收const指针的函数呢?代码编译时没有丢弃const限定符的警告。 最佳答案 Myquestionisifarrisaconstpointer,howcomeicansendittoafunctiontha

The authenticity of host ‘gitee.com (180.76.198.77)‘ can‘t be established.ED25519 key fingerprint i

1、在使用gitee的过程中,我们可能碰到这个问题,怎么解决:2、输入yes就行,就能够看到了

c++ - 从 ‘const char*’ 到 ‘char’ 的无效转换

我正在尝试使用以下代码行将字符串中的某个字符替换为空格:str[i]="";如何在没有问题标题错误的情况下实现这一点? 最佳答案 使用单引号str[i]='';在C++中,标记""是一个字符串文字,表示两个字符的数组:字符集中的空格值(例如,ascii中的值32)和零.另一方面,标记''表示具有空格值(通常为32)的单个字符。请注意,在C语言中,标记''表示具有空格值的整数。(在C中,sizeof''==sizeof(int),而在C++中,sizeof''==sizeof(char)==1。)

C++ 用一个参数 const 重载

为什么在C++中不允许跟随#includeclassSample{public:voidMethod(charx);voidMethod(charconstx);};voidSample::Method(charx){chary=x;}voidSample::Method(charconstx){chary=x;}intmain(){Samples;return0;} 最佳答案 为什么在C++中不允许跟随?原因和编译器给你的编译错误一样:因为它们是模棱两可的!为什么这些方法不明确?简短回答:因为C++标准是这么说的。这些重载方法不明

c++ - static_cast 一个 void* 指针可以吗

例如提议maphold其中void*总是存储来自classA的指针稍后通过static_cast将其投回是否安全?classA*ptr=static_cast(holditerator->second);原因void*使用是因为hold是在某些不知道什么的cpp文件使用的header上定义的类的成员classA是。我必须包括classA的标题这些cpp文件的定义由于许多原因而无法完成。 最佳答案 是的,static_cast在那种情况下是可以的,并且是正确的使用方式。不过,我不得不问您为什么不首先存储classA*指针。如果你想将派