jjzjj

temporary

全部标签

c++ - 将临时对象附加到对 const 的引用时出错

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:typedefandcontainersofconstpointers为什么代码会发出错误?intmain(){//testcodetypedefint&Ref_to_int;constRef_to_intref=10;}错误是:error:invalidinitializationofnon-constreferenceoftype‘int&’fromatemporaryoftype‘int’我阅读了prolongingthelifetimeoftemporaries上的帖子这表示临时对象可以绑定(bind

c++ - C/C++ 警告 : address of temporary with BDADDR_ANY Bluetooth library

我在使用g++和在Ubuntu下使用蓝牙库的C/C++程序的编译过程时遇到了一些问题。如果我使用gcc,它可以正常工作,没有任何警告;相反,如果我使用g++,我会收到此警告:warning:takingaddressoftemporary即使程序编译正常并且可以运行。报错涉及的线路有:bdaddr_t*inquiry(){//dosomestuff..bacpy(&result[mote++],BDADDR_ANY);returnresult;}//...voidzeemote(){while(bacmp(bdaddr,BDADDR_ANY)){/..}}在这两种情况下,都涉及BDAD

c++ - 修改临时对象

有人能说出为什么test(2)对象在test_method()调用后被销毁吗?#include#includeusingnamespacestd;classtest{intn;public:test(intn):n(n){cout输出是:mainstarttest:1test:2test_method:2~test:2mainend~test:1 最佳答案 test(2).test_method()返回一个引用,它绑定(bind)到test2,然后它引用的对象在结束时销毁完整的表达,因为它是一个临时对象。这应该不足为奇。真正令人惊讶

C++ 临时字符串生命周期

抱歉,我知道存在类似的问题,但我仍然不完全清楚。以下安全吗?voidcopyStr(constchar*s){strcpy(otherVar,s);}std::stringgetStr(){return"foo";}main(){copyStr(getStr().c_str());}临时std::string将存储getStr()的返回值,但它是否存在足够长的时间让我将其C字符串复制到别处?或者我必须明确地为它保留一个变量,例如std::stringtemp=getStr();copyStr(temp.c_str()); 最佳答案

C++ 错误 : "taking address of temporary array"

我试图在if语句中声明一个数组。我以这种方式编写代码,以便在ifblock退出后对象保留在范围内,但现在我遇到了一个新问题:“获取临时数组的地址”。我怎样才能用另一种方式重写它,以便为maskArray分配正确的值?int*maskArray;if(conditional==true)maskArray=(int[9]){0,1,0,1,-4,1,0,1,0}; 最佳答案 假设您以后不打算修改maskArray指向的内容,那么最好/最简单的解决方案是:constint*maskArray;if(conditional==true){

c++ - 从函数返回临时对象的引用

考虑以下代码-#include#includeconstint&retRef(){return6;}intmain(){constint&k=retRef();printf("Value:%d\n",k);printf("Address:%p\n",&k);printf("Value:%d\n",k);return0;}输出是-Value:6Address:0x7ffd45bf544cValue:32692为什么在打印变量k的地址后值发生变化?如果我将行constint&k=retRef()替换为constint&k=6;,则输出符合预期。为什么会有这种不同的行为?提前致谢

c++ - 使临时变量的 const 引用成员安全吗?

我曾多次尝试这样编写代码:structFoo{doubleconst&f;Foo(doubleconst&fx):f(fx){printf("%f%f\n",fx,this->f);//125125}doubleGetF()const{returnf;}};intmain(){Foop(123.0+2.0);printf("%f\n",p.GetF());//0return0;}但它根本不会崩溃。我还使用valgrind来测试程序,但没有出现错误或警告。因此,我假设编译器自动生成了一段代码,将引用指向另一个隐藏变量。但我真的不确定。 最佳答案

c++ - temporary的析构函数什么时候调用

我想知道何时为C++03和C++11调用临时数组的析构函数假设我有以下情况foomethod(){foof;............returnfoo;}voiddoSomething(){foof=method();....}假设我正在使用标志-fno-elide-constructors因为我想从理论上了解何时调用临时的析构函数。因此,在C++03中的上述代码中,当method()完成时,使用其复制构造函数制作了foo的拷贝。之后在语句foof=method()中再次调用foo的复制构造函数。在这种情况下,对于C++03,何时调用此临时对象(由method传递)的析构函数?是否在范

c++ - 如果没有对它的常量引用,临时对象会被删除吗?

让我们看一下这两个函数:std::stringget_string(){std::stringret_value;//Calculateret_value...returnret_value;}voidprocess_c_string(constchar*s){std::cout这里有两个可能的process_c_string调用,参数由get_string返回。没有绑定(bind)const引用到get_string的返回对象。process_c_string(get_string().c_str());对get_string的返回对象绑定(bind)const引用。conststd

c++ - Clang 提示 : "pointer is initialized by a temporary array"

我有一个不同长度的(指向)数组的数组,我了解到我可以使用复合文字来定义它:constuint8_t*constminutes[]={(constuint8_t[]){END},(constuint8_t[]){1,2,3,4,5END},(constuint8_t[]){8,9,END},(constuint8_t[]){10,11,12,END},...};gcc很好地接受了这一点,但clang说:指针由一个临时数组初始化,它将在完整表达式结束时被销毁。这是什么意思?代码似乎可以正常工作,但话又说回来,许多事情似乎在指向不再分配的内存时可以正常工作。这是我需要担心的事情吗?(最终我真