c 11 – C字符串的内部缓冲区地址未定义的行为

c 11 – C字符串的内部缓冲区地址未定义的行为,第1张

概述在c 11标准下是否存在以下未定义的行为: (试图获取字符串内部缓冲区的地址) std::string s;... = &s[0]; 例如当s为空时? 我知道我们有c_str(),data(),但是. 注意 这是来自与某人的辩论,这不是为了促进hacky编码 在C 11中,代码定义明确,但可能无法达到预期效果.确切的影响是,根据21.4.5 / 2: Returns: *(begin() + 在c 11标准下是否存在以下未定义的行为:

(试图获取字符串的内部缓冲区的地址)

std::string s;... = &s[0];

例如当s为空时?

我知道我们有c_str(),data(),但是.

注意

这是来自与某人的辩论,这不是为了促进Hacky编码

解决方法 在C 11中,代码定义明确,但可能无法达到预期效果.确切的影响是,根据21.4.5 / 2:

Returns: *(begin() + pos) if pos < size(),otherwise a reference to an object of type T with value
charT(); the referenced value shall not be modifIEd.

因此,如果字符串非空,则返回对内部缓冲区start的引用.如果它为空,则返回对值为0的char的引用,其位置为memory是实现细节.

总结

以上是内存溢出为你收集整理的c 11 – C字符串的内部缓冲区地址未定义的行为全部内容,希望文章能够帮你解决c 11 – C字符串的内部缓冲区地址未定义的行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存