Giriş
[] ve at() metodları ile yapılır. Her ikisinin de hem const dönen hem de dönmeyen türleri vardır.
1. [] metodu
İmzası şöyle.
Açıklaması şöyle. En sondaki NULL karaktere erişime izin verir.
Örnek
Boş string için dikkatli kullanmak gerekir. Bu kodun C++14 ile çalışması garanti iken, daha eski bir standartta çalışmayabilir.
İmzası şöyle.
[] ve at() metodları ile yapılır. Her ikisinin de hem const dönen hem de dönmeyen türleri vardır.
1. [] metodu
İmzası şöyle.
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
Açıklaması şöyle.pos == size ise
- Requires: pos <= size().
- Returns: *(begin() + pos) if pos < size(). Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object leads to undefined behavior.
- Throws: Nothing.
- Complexity: constant time.
Açıklaması şöyle. En sondaki NULL karaktere erişime izin verir.
str[str.size()] basically points to the null-terminator character. You can read and write it, but you may only write a '\0' into it.at() metodu gibi exception fırlatmaz çünkü metodu içi şöyle
template <class _CharT, class _Traits, class _Allocator>
inline
typename basic_string<_CharT, _Traits, _Allocator>::const_reference
basic_string<_CharT, _Traits, _Allocator>::operator[](size_type __pos) const _NOEXCEPT
{
_LIBCPP_ASSERT(__pos <= size(), "string index out of bounds");
return *(data() + __pos);
}
template <class _CharT, class _Traits, class _Allocator>
inline
typename basic_string<_CharT, _Traits, _Allocator>::reference
basic_string<_CharT, _Traits, _Allocator>::operator[](size_type __pos) _NOEXCEPT
{
_LIBCPP_ASSERT(__pos <= size(), "string index out of bounds");
return *(__get_pointer() + __pos);
}
pos == 0 iseÖrnek
Boş string için dikkatli kullanmak gerekir. Bu kodun C++14 ile çalışması garanti iken, daha eski bir standartta çalışmayabilir.
std::string my_string = "";
char test = my_string[0];
2. at metoduİmzası şöyle.
const_reference at(size_type pos) const;
reference at(size_type pos);
at () için pos == size() verirsek out_of_range exception alırız. Yani [] ve at() metodları arasında tutarsızlık var. Metodun içi şöyletemplate <class _CharT, class _Traits, class _Allocator>
typename basic_string<_CharT, _Traits, _Allocator>::const_reference
basic_string<_CharT, _Traits, _Allocator>::at(size_type __n) const
{
if (__n >= size())
this->__throw_out_of_range();
return (*this)[__n];
}
Hiç yorum yok:
Yorum Gönder