You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《C++之旅》9.3节string_view示例代码编译错误咨询

问题分析与解决

你遇到的问题确实是原示例代码的兼容性bug,原因如下:

string res(sv1.length()+sv2.length());这一行调用的构造函数,在C++11之前的标准里根本不存在——早期std::string要求创建指定长度的字符串时,必须同时提供填充字符(比如string res(n, '\0'))。

虽然C++11新增了explicit std::string(size_type n)构造函数(用来创建含n个空字符的字符串),但部分编译器或编译配置可能对这个构造函数的匹配有严格限制,导致你看到的错误。

修复代码

把构造字符串的行改成以下两种方式之一,就能在所有支持string_view的C版本(C17及以上)中正常编译:

方式1:明确指定填充字符

string res(sv1.length() + sv2.length(), '\0');

方式2:更简洁的拼接方式

string res(sv1.begin(), sv1.end());
res += sv2;

补充说明

原代码的写法在部分严格遵循标准的编译器环境下可能通过,但它依赖的std::string(size_type)构造函数是C++11才加入的,且属于explicit构造,容易引发匹配问题。原书的这个示例确实存在兼容性瑕疵,勘误表没收录可能是因为属于边缘场景。

内容的提问来源于stack exchange,提问作者user20407427

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:10:30