参考c ++临时字符串的内容

时间:2017-06-16 10:15:55

标签: c++ c++11 boost temporaries

以下代码正在运行,我正在努力了解如何。

infile.string()

根据我的理解char*创建一个临时文件并指向内容。语句结束的时刻(;)临时字符串应该超出范围,导致文件成为悬空指针。

我将使用字符串而不是var text = $('.chatcontainer').text(); ,但仍需要了解我所缺少的内容。

编译器 - gcc 4.8.4
优化 - O3

2 个答案:

答案 0 :(得分:2)

git pull返回infile.string()类型的对象。并且std::string返回指向对象的某些内容的指针,因此.c_str()是指向对象内容的指针。但在语句结束时,file对象及其内容被破坏。结果,指针std::string指向无处,在下一个语句的开头。

答案 1 :(得分:-2)

C ++指定将临时对象绑定到堆栈上对const的引用会将临时对象的生命周期延长到引用本身的生命周期,这意味着 const char * file 位于叠加。

这个C ++机制可以避免你指出的悬空引用错误。 在上面的代码中,临时生命直到你的函数processTextFile的结束大括号。

您可以查看此GOTW了解详情。