gpt4 book ai didi

c++ - 为什么 std::vector<>::const_reference 可以转换为非常量指针?

转载 作者:行者123 更新时间:2023-11-28 05:05:23 26 4
gpt4 key购买 nike

<分区>

在 g++ 中,const std::vector<> 的元素访问运算符定义如下:(/usr/include/c++/7.1.1/bits/STL_vector.h)

/**
* @brief Subscript access to the data contained in the %vector.
* @param __n The index of the element for which data should be
* accessed.
* @return Read-only (constant) reference to data.
*
* This operator allows for easy, array-style, data access.
* Note that data access with this operator is unchecked and
* out_of_range lookups are not defined. (For checked lookups
* see at().)
*/
const_reference
operator[](size_type __n) const _GLIBCXX_NOEXCEPT
{
__glibcxx_requires_subscript(__n);
return *(this->_M_impl._M_start + __n);
}

但是下面的代码使用 g++ -c const-vector.cpp -Wall -pedantic 编译没有问题

#include <vector>

void sum(const std::vector<int>& data){
int *ptr;
ptr = (int*) &data[0];
if (data.size()>2)
for (unsigned int i=1;i<data.size();i++)
ptr[0]+=ptr[i];
return;}

所以我正在更改由 const 引用传递的 vector 的内容。

根据 cppreference.com , operator[] 被重载了:

reference       operator[]( size_type pos );
const_reference operator[]( size_type pos ) const;

在什么情况下编译器会进行第二次重载?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com