Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出?_C++_String_Visual Studio_Visual C++ - Fatal编程技术网

C++ 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出?

C++ 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出?,c++,string,visual-studio,visual-c++,C++,String,Visual Studio,Visual C++,我有正确工作的代码: #include <iostream> std::string func() { return "string"; } int main() { std::string str = func(); std::cout << str << std::endl; return 0; } #包括 std::string func() { 返回“字符串”; } int main() { std::string

我有正确工作的代码:

#include <iostream>

std::string func()
{
    return "string";
}

int main()
{
    std::string str = func();
    std::cout << str << std::endl;
    return 0;
}
#包括
std::string func()
{
返回“字符串”;
}
int main()
{
std::string str=func();

好吧,你的第二个例子是未定义的行为,由于访问了释放的内存。任何事情都可能发生

func()
返回一个临时的
std::string
,其生存期在完整表达式结束时结束,将
c
变成一个悬空指针:

const char* c = func().c_str();
禁止使用悬挂指针,尤其是取消引用:

std::cout << c << std::endl;

std::cout好吧,第二个例子是未定义的行为,因为访问了释放的内存。任何事情都可能发生

func()
返回一个临时的
std::string
,其生存期在完整表达式结束时结束,将
c
变成一个悬空指针:

const char* c = func().c_str();
禁止使用悬挂指针,尤其是取消引用:

std::cout << c << std::endl;
std::cout