我需要 operator[]
的“双重”行为,有时它必须返回一个新的实例变量(也称为“临时”),有时还需要返回对另一个变量的引用,以便 =
可以对结果进行赋值。
var &getItemAt(int i) {}
var &operator[] (int i) {
if (this->isArray()) {
return getItemAt(i);
}
var result = "undefined";
return result; <-- Error: attempt to return a reference to a local variable
}
var a = 123; // var can be a number, array, string or 'undefined'
var b;
b.setType("array");
b.push("one", "two", "three");
b[1] = "new value"; // needs to be var& for the assignment to work
如果我尝试这样声明(不带 &):
var operator[] (int i) {
对 b[1] = ...
的赋值不会做任何事情(事实上它会赋值给一个临时变量,它是在索引位置 1 处找到的数组的拷贝并保持值“二”。
但是如果我声明 var & operator =
数组语义完美工作,但我不能返回 undefined
或其他临时变量。
如何将两种行为合而为一?
最佳答案
您可以返回对静态变量的引用:
var &operator[] (int i) {
if (this->isArray()) {
return getItemAt(i);
}
static var result = "undefined";
return result;
}
这个变量将一直存在到程序终止,所以不会悬空。
关于c++ - 在 operator[] 中混合引用和值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31004927/