@
vcfghtyjc C++本来就不是一次性精心设计出来的语言,再把那些兼容 C 的东西放进来之后就更混乱邪恶了。这种时候做一件事情会有多种方式,其中的一些虽然凑合着能用编译器不会干死你但精神上不太正确 /属于历史残留问题(比如某些 best practices 里面三番五次提醒过不要用的),所以 C++里某种写法语义正确完全不代表应该接着用它们,强求一致性更是没意义与不可能的。如果想写一个优美点的语言,你就不能把所有语法同等对待,必须自己裁剪一部分出来顺带着对一些旧东西进行新的解读,而做这些事情的依据不是 C++内部能确定的,得由来自外部的知识确定,这大概是我想强调哪个(至少精神上)更「正确」的原因。
至于学习门槛……现在 C++的学习 /教学上问题当然非常大,我觉得最麻的还是初学者刚上来基本上是在大量过时 /误导性的材料里面游泳,而不是符不符合直觉这种事情(毕竟一般人的直觉很多是错的,如果一个人直觉比较准的话那它大概自己也知道咋学了不太容易被各种坑人的东西整蛊到)。
关于你具体的问题……我觉得不应该把 string literal 看成是某种老式的 std::string ,它(作为指向一段 char const 的 handle )更像是个扭曲的 std::string_view ,这下子二者都不支持 operator+了( view 对“运算”不封闭:把两个 view 拼在一起并不能得到一个新的 view ),是不是顺眼一点了?
(当然这是种重新解读后的结果,毕竟别说刚整出(C) string literal 的时候还没有 string_view 了,好像你看的这书因为有点老里面也没有它……)