当前位置:  开发笔记 > 编程语言 > 正文

`std :: basic_string :: operator []`可以返回一个"远程"受保护的页面nul终结符吗?

如何解决《`std::basic_string::operator[]`可以返回一个"远程"受保护的页面nul终结符吗?》经验,为你挑选了0个好方法。

所以,operator[]不直接说s[s.size()]必须是s[s.size()-1]内存之后的人物.似乎措辞是为了避免提出这种说法.

但是s.data()s.data()+k == &s[k],并且s.data()必须返回一个指针.

忽略&CharT上面使用而不是上面使用的看似标准缺陷,std::addressof实现CharT是否s[s.size()]可以在第一次调用之前自由地返回不同的(例如,在受保护的页面上,或在ROM中)s.data()?(显然,它可以将缓冲区安排在一个只读的页面上结束;我说的是另一种情况)

要明确:

据我所知,如果s.data()永远不会被调用(并且编译器可以证明它),那么s[s.size()]就不需要与缓冲区的其余部分连续.

可以在调用之后进行std::addressof(s[s.size()]) 更改,s.data()并且实现符合标准(只要之前s.data()+k == &s[k]已经过.data()评估[],但编译器可以自由执行).或者是否有我看不到的不变性要求?

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有