C++ std::string和#x27之间有区别吗;s front()和[0]?

C++ std::string和#x27之间有区别吗;s front()和[0]?,c++,string,C++,String,在我的程序中,我需要检查std::string的第一个字符,并使用如下内容: if(string.front()=='-') 我想知道,使用下面的代码会有什么不同吗 if(字符串[0]='-') 同时front()和操作符[]返回对元素的引用,所以没有区别 如果需要边界检查,可以使用std::string::at,它执行边界检查并抛出std::out\u of_range异常。这两个front()和操作符[]都返回对元素的引用,因此没有区别 如果需要边界检查,可以使用std::string::

在我的程序中,我需要检查
std::string
的第一个字符,并使用如下内容:

if(string.front()=='-')
我想知道,使用下面的代码会有什么不同吗

if(字符串[0]='-')
同时
front()
操作符[]
返回对元素的引用,所以没有区别

如果需要边界检查,可以使用
std::string::at
,它执行边界检查并抛出
std::out\u of_range
异常。

这两个
front()
操作符[]
都返回对元素的引用,因此没有区别

如果需要边界检查,可以使用
std::string::at
,它执行边界检查并抛出
std::out_of_range
异常。

来自for
string::front

效果:相当于:
返回运算符[](0)

因此,您显示的两段代码之间没有区别。

来自for
string::front

效果:相当于:
返回运算符[](0)


因此,您所显示的两段代码之间没有区别。

per
front
返回对第一个字符的引用,相当于运算符[](0)。哦,我完全忽略了这一点!感谢您指出这一点。per
front
返回对第一个字符的引用,相当于运算符[](0)。哦,我完全错过了!谢谢你指出这一点。那么你要说的是
front()
operator[](0)
之间的区别是,如果字符串为空,两者都是UB….?对于op的问题,实际上没有区别,因为
front
operator[]
都返回对元素的引用,我想告诉op,如果他需要边界检查,他必须使用
std::string::at
,也许我的答案不清楚,下次,我会尽量让我的答案更清楚。谢谢
@DevSolar
,但问题不是关于边界检查,也没有迹象表明OP需要它@DevSolar编辑了我的答案,以在最后回答op的问题和我的建议。因此,您的意思是
front()
operator[](0)
之间的区别是,如果字符串为空,两者都是UB…?对于op的问题,实际上没有区别,因为
front
operator[]
返回对元素的引用,我想告诉op,如果他需要边界检查,他必须使用
std::string::at
,也许我的答案不清楚,下次,我会尝试更清楚地回答。谢谢
@DevSolar
,但问题不是关于边界检查,也没有迹象表明OP需要它@DevSolar编辑了我的答案,最后回答了op的问题和我的建议。