首页 > 解决方案 > 为什么以 const char* 返回时会在此处创建临时字符串?[Stroustrup 的书例]

问题描述

我试图从初学者的书中理解下面的代码。(编辑:'programming principle and practice using c++' page 1085)我不太明白为什么根据评论制作临时字符串。

const char* string_tbl[ ] = { "Mozart", "Grieg", "Haydn", "Chopin" };
const char* f(int i) { return string_tbl[i]; }
void g(string s){}

void h()
{
    const string& r = f(0);  // bind temporary string to r
    g(f(1));                 // make a temporary string and pass it
    string s = f(2);         // initialize s from temporary string
    cout << "f(3): " << f(3) // make a temporary string and pass it
    <<" s: " << s
    << " r: " << r << '\n';
}

f()返回一个指向 const char 的指针,对吧?

不应该const string& r = f(0);将“指向 char 的指针”(在这种情况下是全局数组中的字符串文字)分配给引用变量,以便可以使用 r[] 等访问(只读)原始变量?

并将g(f(1));指针传递给然后用指针初始化的 g()位置?string s

我错过了什么?const char* 从函数返回时是否总是产生一个临时字符串?

标签: c++

解决方案


有一个隐式转换,代码

string s = f(2);

等于

string s = string(f(2));

推荐阅读