- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
据我所知,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
版本。如果 vector
是 const
,则调用 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/
阅读 Doug 的“Javascript: the goods parts”中关于函数的第 4 章谈论“方法调用模式”和“函数调用模式”(第 28 页)。 When a function is sto
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
在 Inkscape 中创建的文件的 svg 路径如下 -- d="m 1.2499932,903.60456 0,146.50004 197.7500068,0 0,-146.50004 -197.
有没有办法只为类对象制作 setter/getter?我的意思是,无论如何要在类里面为 this 设置 get/set 吗?例如: class something { constructor(
int main(int argc,char **argv){ for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) {
正如 Scott Meyers 和 Andrei Alexandrescu 在 this 中概述的那样文章 简单尝试实现双重检查锁定实现在 C++ 中特别是不安全的,并且通常在不使用内存屏障的多处理器
我正在尝试使用ionic 3 发布一个android 应用程序,但是运行时出现错误 apksigner verify myapp.apk 这些错误显示: WARNING: META-INF/andro
Java网站教程中的这个例子page .两个接口(interface)定义了相同的默认方法 startEngine()。类 FlyingCar 实现了这两个接口(interface),并且由于明显的冲
我在我的桌面应用程序中做了一些非常简单的错误记录,该应用程序通过 SerialPort 与设备通信。我做的一件事是设置一个全局异常捕获器,它除了使用以下方法记录堆栈跟踪外什么都不做: AppDomai
根据 SQL 规范,对此 sql 查询的这些响应中哪些更正确? 这是mysql更高版本的响应 C:\wamp\bin\mysql\mysql5.7.11\bin>mysql.exe --version
我正在尝试解决 GEEK COUNT spoj 的问题。我解决这个问题的方法是先找到所有奇数位的数字,然后从给定的数字中减去它。为了查找所有奇数位的数字计数,我使用了简单的排列。它为我提供了所有可能的
我有这个基本的文本检查代码,在 iOS 7 之前一直运行良好: NSMutableCharacterSet*testchars=[NSCharacterSet alphanumericChara
我对下面的代码感到困惑: class MyException extends Exception {} class AnotherException extends MyException {} cl
我在这段代码中遇到编译错误 #include #include #include using namespace std; void main(int argc
我在我的应用程序中使用导航组件,最近它工作正常但是在将项目更新到 AndroidX 之后我收到错误消息 navigation destination DESTINATION_NAME is unkno
{ "status":"success", "contents":[ { "id":"100", "event":"",
我是一名优秀的程序员,十分优秀!