草庐IT

弱引用

全部标签

c++ - 如何创建一个具有 32 位 int 和四个 8 位 char 类型的 union ,每个 char 类型都引用 32 位 int 的不同切片?

我想创建一个最大成员是32位整数的union。主要写到这里。然后是四个8位变量,可能是char类型,每个变量将引用32位整数的不同部分,例如:union{int32myint;charchar1[7:0];charchar2[15:8];charchar3[23:16];charchar4[31:24];}但我不确定如何在C++中执行此操作。 最佳答案 这可能有效:union{int32myint;charchars[4];}; 关于c++-如何创建一个具有32位int和四个8位char

c++ - 引用使用 Union

在工作中,我一直在使用linux和适用于C++11和C++14的GCC编译器。在一些工作代码中,我使用union来存储引用和指针,如下所示:(简化为仅重要部分)structMyStruct{//Stuffunion{double&x;double*x_ptr;};MyStruct(double&value):x(value){}//Morestuff};我相信这段代码清晰、可读、明确,并且提供了一种方便的方式来存储可以转移到其他内容的引用。它提供了易于理解的语法糖,在提高可读性的同时不影响性能。然而,当我尝试在visualstudio15中使用这样的代码时,由于“double&类型的非

c# - C++中指针和C#中引用类型的区别

在C++中,指针是指向存储另一个变量的内存地址的指针,在C#中,引用在某种程度上是相同的。这两者有什么区别? 最佳答案 在C#中,引用类型将在不再需要时自动被垃圾回收。 关于c#-C++中指针和C#中引用类型的区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2146202/

c++ - 模板按值传递或 const 引用或...?

我可以这样写一个模板函数templatevoidf(Tx){…}或者这样templatevoidf(Tconst&x){…}我想第二个选项可能更优化,因为它明确避免了复制,但我怀疑它也可能对某些特定类型失败T(例如仿函数?)。那么,什么时候应该使用第一个选项,什么时候使用第二个呢?还有这个boost::call_traits::param_type和boost::reference_wrapper在我的previousquestion的答案中,但人们不会到处使用它们,对吗?有这方面的经验法则吗?谢谢。 最佳答案 Istherearu

c++ - const 变量的引用运算符 "&"的结果是什么?

我被问到如何改变常量变量的值。我的明显答案是“指针!”但我尝试了下一段代码,我很困惑......intmain(){constintx=5;int*ptr=(int*)(&x);//"Castaway"theconst-ness..cout输出是:Valueat:5Nowthevalueofis:6Butthevalueofxisstill5现在,我不确定从“&x”返回的到底是什么,但它绝对不是x的实际地址,因为x的值没有改变!但另一方面,ptr确实在开头包含x的值!那么,它到底是什么?EDIT用VS2010编译 最佳答案 您的程序

c++ - 对函数的引用不明确

这个问题在这里已经有了答案:Strangeambiguouscalltooverloadedfunctionerror(11个答案)关闭6年前。为什么这会导致编译器错误,指出我的引用不明确?我有一个float、int和string,它们应该都创建单独的函数签名,对吗?这是我目前所拥有的:#include#includeusingnamespacestd;intplus(inta,intb);floatplus(floata,floatb);stringplus(stringa,stringb);intmain(void){intn=plus(3,4);doubled=plus(3.2,

c++ - std::vector.at()。它返回引用或拷贝吗?

我刚开始学习C++,我正在尝试std::vector的工作原理。我有这个测试程序:#include#includeintmain(){std::vectorelement1={1,2,3};std::vectorelement2={4,5,6};std::vector>lista={element1,element2};std::vectorvar=lista.at(0);for(std::vector::const_iteratori=var.begin();i!=var.end();++i)std::cout::const_iteratori=var.begin();i!=var.

c++ - 引用是存储在堆上还是栈上?

不知这段代码中c等引用变量是否:inta=5;int&c=a;从堆或栈中分配。谁能帮忙?谢谢 最佳答案 引用只是一个别名,C++11标准未指定它是否需要实际存储。根据C++11标准的第8.3.2/4段:Itisunspecifiedwhetherornotareferencerequiresstorage(3.7). 关于c++-引用是存储在堆上还是栈上?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

C++11 基于范围的按值、引用和指针的自动 for 循环

我知道如何在for循环中使用auto关键字来按值或引用迭代此数组。structA{voidfun(){};};intmain(){Aa[2];//Valuefor(autox:a){x.fun();}//Reffor(auto&x:a){x.fun();}//Pointer//for(...){x->fun();}}所以我正在寻找这个约定的第三个版本。我如何在这里使用指针? 最佳答案 Aa[2];for(auto&x_:a){auto*x=&x_;//code} 关于C++11基于范围的

c++ - 引用可能比指针更有效吗?

我想知道有时(取决于平台或编译器或代码中的上下文等)引用是否比指针更有效? 最佳答案 Mayareferencebemoreefficientthanapointer?不!不必要。标准也没有这样说。大多数编译器通过使用指针来实现引用机制。向C++添加引用是为了支持运算符重载,而不是为了提高效率。 关于c++-引用可能比指针更有效吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/