gpt4 book ai didi

c++ - C++ 如何对此 "vector[0] = 1;"进行重载解析

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:55 24 4
gpt4 key购买 nike

据我所知,C++ 只有基于参数或隐含对象参数的函数重载。但我发现 vector 有两个运算符[]。它将在以下代码中选择正确的函数:

std::vector<int> v;
v[0] = 1; // This will select the non-const version.
return &v[0]; // This will select the const version.

谁能解释这是怎么发生的?

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

------编辑1------

我认为它会选择 const 版本,因为以下 cc 文件无法用 clang++ 和 g++ 编译并出现以下错误。不明白以下错误。谁能解释更多?

error: cannot initialize return object of type 'char *' with an rvalue of type 'const value_type *' (aka 'const char *') return data_.size() == 0 ? NULL : (&data_[0]);

#include <assert.h>

#include <deque>
#include <vector>
#include <map>


class X
{
public:

X() {
}

virtual ~X() {
}

char* data() const {
return data_.size() == 0 ? NULL : (&data_[0]);
}

size_t size() const {
return data_.size();
}


private:
std::vector<char> data_;
};

最佳答案

实际上在这两种情况下都调用了非const 版本。如果 vectorconst,则调用 const 版本的时间。

std::vector<int> const v = {1,2,3};
int x = v[0];

在上述情况下,尝试调用非const 版本会导致编译器错误

v[0] = 5;   // nope can't call non-const version, this is trying to mutate a const variable

编辑
关于你的例子,基于你的函数的签名

char* data() const

您已经声明data 方法是const,这意味着它不会尝试改变任何成员变量。换句话说,const 函数中的所有成员变量都被视为const。在 const 方法的上下文中,变量被视为

std::vector<char> const data_;

关于c++ - C++ 如何对此 "vector[0] = 1;"进行重载解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478259/

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