c++ - 为什么 --string::end() 编译但 --string.size() 不编译?
问题描述
编码
std::string str{ "foo" };
auto lastCharIndex{ --str.size() };
创建编译器错误lvalue required as decrement operand
,但
auto lastCharIterator{ --str.end() };
才不是。为什么是这样?
解决方案
string::size
按值返回标量类型(某种整数),并且--
不允许在纯右值上使用内置前缀表达式。相比之下,对于本质上只是函数的重载运算符(在用户定义的类型上),则不适用此类限制。因此是否--str.end()
允许取决于string::iterator
是用户定义类型(某种类类型)还是标量类型(例如指针)。但是,这没有指定,甚至可能因优化设置而异。
推荐阅读
- asp.net-core - ASP.NET Core 将 Web 应用程序部署到 aws ubuntu 服务器 18。除了没有 css、js、jquery 或引导程序之外,一切正常
- asp.net-mvc - 调试模式下的 ASP.NET 针对本地 SQL Server 2019 数据库获取随机超时
- python - 如何在python中更改按钮颜色
- python - 如何根据 Python Pandas 中的其他列在 DataFrame 中创建新列?
- python-3.x - Jupyter Notebook 如何为 datepicker 分配默认值并对所选日期内的时间进行排序?
- python - 通过脚本或终端运行时的scrapy模块路径差异
- php - Laravel 8重定向回来,消息在刀片模板中不起作用
- wordpress - 检索并放置在表单字段中的自定义维度
- wso2 - 为什么我的 WSO2 APIM APIKeyValidator 以 Erro 响应?
- android - Google ArCore Sceenform - 在运行时加载时使用 glTF 或 GLB 的 ModelRenderable 会导致应用程序崩溃