草庐IT

弱引用

全部标签

c++ - 使用 C++ boost::split 拆分字符串而不拆分引用文本

我正在使用boost::split(strs,r_strCommandLine,boost::is_any_of("\t"));将字符串吐出到token中以解析简单的脚本。到目前为止,一切都很好。但是,对于下面的字符串command_namefirst_argument"Secondargumentwhichisaquotedstring."我希望我的代币是strs[0]=command_namestrs[1]=first_argumentstrs[2]="Secondargumentwhichisaquotedstring."当然,我可以在标记的开头和结尾搜索引号字符,并使用“”合并

C++ 通过 const 引用传递 const 指针

嗯,在VC2012中很奇怪,我似乎无法弄清楚通过const引用将const指针传递到模板参数是非const指针的模板类函数的语法,即:templatestructFoo{voidAdd(constT&Bar){printf(Bar);}};voidmain(){Foofoo;constchar*name="FooBar";foo.Add(name);//Causeserror}所以我在这里简化了我的问题,但基本上我希望“Add”的参数有一个constTieconstchar*。我试过:voidAdd(const(constT)&Bar);typedefconstTConstT;void

c++ - 函数什么时候必须在 C++ 中返回引用

这个问题在这里已经有了答案:IsthepracticeofreturningaC++referencevariableevil?(16个答案)关闭9年前。在c++中,在什么情况下我们必须从函数返回一个引用?我理解使用引用作为函数输入,但对于函数输出,为什么我们不能只返回值或指针?

c++ - 地址运算符 (&) 与引用运算符 (&)

我对这个案例有点困惑:声明一个指针:intb=10;int*a=&b;这里&获取b的地址。考虑另一个例子:/*Referencetothecallingobjectcanbereturned*/Test&Test::func(){//Someprocessingreturn*this;}这应该是一个指针,*这是指向的对象。但是这里我们要求将*this分配给&Test。我们应该修改代码让函数返回地址。我们还应该使用Test&吗? 最佳答案 在C++中有两种不同的语法单元:&variable;//extractsaddressofvar

c++ - 右值引用 : what exactly are "temporary" objects, 它们的范围是什么,它们存储在哪里?

rvaluereferences:whatexactlyare"temporary"objects,whatistheirscope,andwherearetheystored?阅读一些文章,右值总是被定义为“临时”对象,如Animal(),其中Animal是一个类,或者一些文字,例如10。但是,右值/“临时”对象的正式定义是什么?newAnimal()是否也被认为是“临时”对象?或者它只是堆栈上的值,例如Animal()和存储在代码中的文字?此外,这些“临时”对象存储在哪里,它们的作用域是什么,以及对这些值的右值引用的有效期有多长? 最佳答案

c++ - 将非左值作为 const 引用参数传递。 temp 是在本地作用域还是在调用者作用域中创建的?

好的,所以,我已经知道返回一个局部变量作为引用会在我们尝试使用它时导致未定义的行为,并且我们可以创建一个非常量引用来仅形成一个左值变量。创建const引用不需要从左值变量创建,因为如果它是从非左值变量创建的,它会在该范围内创建一个临时引用(下面的代码)。constint&refa{2};//basicallyequalsconstinttemp_a{2};constint&refa{temp_a};我的问题是,如果我们将非左值作为参数传递给采用const引用的函数,临时变量是在调用者的本地范围内创建还是在函数的本地范围内创建?我很好奇是否将参数作为引用返回并使用它会导致未定义的行为。示

c++ - 通过引用传递父对象

我在库中有这段代码:classParent{//somedataandfunctions};voidmyfunc(Parent&ref);我想在我的应用程序中执行此代码:classChild:publicParent{//someotherdataandfunctionsvoiddostuff(){myfunc(*this);}};通过*this是否安全?(没有切片,没有复制,......)像这样调用myfunc更好吗:myfunc(*((Parent*)this))请注意,我无法控制myfunc内部发生的事情,在某些情况下,我什至不知道里面发生了什么。我多次使用过指针传递,我已经习惯

c++ - 引用相对于其目标的生命周期

为了阻止在ananswerIgaverecently的评论中进行的争论,我想要对以下问题的一些建设性答案:引用的生命周期是否不同于它所引用的对象?引用只是其目标的别名吗?在结构良好的程序中,引用能否比其目标生命周期长而不会导致未定义的行为?如果重新使用为原始对象分配的存储空间,是否可以使引用指向新对象?以下代码是否在不调用未定义行为的情况下演示了上述要点?示例代码BenVoigt并简化(在ideone.com上运行):#include#includestructsomething{inti;};intmain(void){charbuffer[sizeof(something)+40]

c++ - 在类构造函数中初始化引用变量

这个问题在这里已经有了答案:InitialisingreferenceinconstructorC++(6个答案)关闭9年前。所以我仍然在搞清楚C++引用的语义。我有一个以引用作为成员的类,我在构造函数中初始化引用。templateclassAVLNode{private:T&data;public:AVLNode(T&newData){data=newData;}};但是我在构造函数行得到这个错误:error:uninitializedreferencemember‘AVLNode::data’[-fpermissive]我不明白,我在构造类后立即初始化引用,所以未初始化引用应该没有

c++ - 取消引用 NULL 指针是否保证使 C/C++ 中的程序崩溃?

我遇到了这个有线代码,它没有崩溃。#includestructs{char*c;char*c2;};intmain(){structs*p=NULL;printf("%d\n",&(p->c));printf("%d\n",&p->c2);printf("%d\n",&(*p).c2);return0;}输出:044我有几个问题无法回答:在c/c++中NULL指针总是等于0吗?如果0恰好是一个变量的地址会怎样?输出似乎是结构成员的偏移地址。这个是怎么算出来的。我的意思是p->c是c的地址,它不存在,因为p==NULL。如果c的地址不存在,怎么能通过&p->c得到c的地址呢?取消引用NU