C++中能否在初始化指针的同时直接返回该指针?
关于初始化指针并直接返回的问题解答
嘿,这个问题我之前也碰到过,咱们好好捋一捋~
首先,你提到的queue<string> *p(&item)能正常运行,这是完全没问题的——这是C++里直接初始化指针的语法,把item的内存地址赋值给指针p,编译器能正确识别这种变量声明式的初始化。
但为什么加上return就报错呢?核心原因是:return语句需要的是一个表达式,而不是变量声明。你尝试写的return queue<string> *(&item);本质上是在试图把变量声明塞进return里,编译器自然会懵,抛出“Expected primary-expression before *”的错误。
正确的解决办法
根据你的需求,有两种常见的正确写法:
1. 返回指向已有对象的指针
如果你只是想返回指向item的指针,直接返回item的地址即可,&item本身就是一个queue<string>*类型的合法表达式:
// 假设在某个函数里,item是已存在的queue<string>对象 return &item;
2. 动态分配新对象并返回指针
如果你想创建一个新的queue<string>对象(拷贝item的值),然后返回指向它的指针,可以用new关键字配合直接初始化:
return new queue<string>(item);
⚠️ 注意:用new分配的内存需要手动用delete释放,否则会造成内存泄漏。
再补充一点小知识
C++里的初始化语法分好几种,像string s("Hi")这种是直接初始化,对于指针来说,直接初始化变量是允许的,但不能把这种声明式写法放到return里——因为return期待的是一个能求值的表达式,而不是定义一个新变量。
内容的提问来源于stack exchange,提问作者thethiny
相关产品推荐
相关产品推荐

