c++ - 为什么以 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* 从函数返回时是否总是产生一个临时字符串?
解决方案
有一个隐式转换,代码
string s = f(2);
等于
string s = string(f(2));
推荐阅读
- c++ - 如何有效地计算变体向量上的函数?
- python - 如何将库存添加到当前脚本
- c++ - 使用唯一指针的 Vector 类的 C++ 下标运算符 []
- python - 转置部分数据框 Python
- android - recyclerview 中按钮的 OnComplete 操作仅适用于第一个位置
- python - Python GUI tkinter arduino 串行数据
- python - python中excel中的countifs之类的函数,用于多个数据帧
- c++ - C++ O(1) 按派生类型查找
- python - 从“子进程”导入名称“_args_from_interpreter_flags”时遇到问题
- html - 页脚不显示在页面底部(内容下方)