构造一个临时对象并调用一个返回指针的方法——安全吗?
Constructing a temp object and calling a method that returns a pointer - is it safe?
我的直觉告诉我不是,但事实上,所有的事情都在同一行中进行,这有点令人困惑。我想知道当cout
使用它时,指针是否仍然有效。
#include <iostream>
#include <string>
struct A {
A() : m_s("test"){ }
const char* c_str() { return m_s.c_str(); }
std::string m_s;
};
int main() {
std::cout << "abc " << A().c_str() << " def" << std::endl;
}
是的,它是安全的。临时A()
在语句的末尾被销毁。
c_str()返回的值是有效的,只要它所获得的std::字符串没有改变并且没有被销毁。因此,您的代码是完全没问题的,因为您创建的临时将具有与它所属的完整表达式(在本例中为cout链)等效的生命周期。
如果在调用之间内容不更改,则是安全的。
返回的地址确实指向char*的有效位置。
相关文章:
- 不能将方法返回的值用于另一个方法
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 重写另一个方法 [C++] 使用的超类回调函数
- C++:如何使用传递引用在一个方法中返回多个值
- 为什么一个方法对同一个变量有常量和非常量参数?
- 从同一类中的另一个方法调用方法时出错
- 向现有类添加一个方法以逐行读取文件的内容
- 无法从派生的一个方法调用基类方法
- 如何将一个方法中的值返回到同一类的另一个方法
- 方法重载 C++ -> 只有一个方法调用
- 在另一个线程中执行一个方法
- 是否可以在另一个方法中使用模板类中定义的虚拟方法
- 调用方法,该方法修改字段,而使用该字段的另一个方法正在执行
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- 仅专用于模板类的一个方法(部分)
- 确定一个方法是否是纯虚拟的(c++)
- 是否可以判断一个方法在编译时是否可以公开访问
- 我正在尝试创建一个方法,该方法使用指针算术返回一对,它是否会出错
- 从 ndk 中的 jni 方法调用另一个C++方法