问题标签 [subscript-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 下标运算符
我写了一个代码,但它似乎不起作用。每次执行程序时,我都会收到此错误
运行时检查失败 #2 - 变量 'ary' 周围的堆栈已损坏
无论如何,这是我的代码(这是一个小代码)
你也可以帮助下标运算符吗,我似乎不明白如何声明和使用它们。同样,在没有首先理解程序的情况下编写程序似乎很愚蠢,但无论如何,我们将不胜感激:)
c++ - C++ 重载运算符 []
我制作了一个应用程序,您可以在其中键入要输入的书籍数量并使用重载运算符([])但是每次我给出一个存储数组的指针时,它都会给我一个错误,例如
2 IntelliSense:表达式必须具有整数或无范围枚举类型 Line:11 Column:24 Library Books
和
错误 1 错误 C2440:“正在初始化”:无法从“std::string”转换为“unsigned int”行:11 列:1 图书馆书籍
但无论如何这是我的代码:
我也不是 100% 确定我是否正确编码,如果还有错误,请告诉我,谢谢。
r - 重载下标运算符“[”
我正在尝试为"["
我创建的自定义类重载下标运算符 ()。我试图弄清楚如何处理以下问题。
- 您如何确定操作员是在 lhs 还是 rhs 上?即
a[x] = foo
与foo = a[x]
- 当下标整个维度
foo = a[,x]
时,我如何识别第一个参数? - 当使用 a[seq(x,y)] 时,它似乎在扩展整个序列。有没有一种简单的方法可以在不扩展的情况下获得第一步、一步和最后一个值?
编辑:我的第一点收到了多个答案。在这个过程中,我已经找到了第二个的答案。您可以使用“缺失”功能来确定存在哪些参数。
这是一个示例代码:
我已经接受了这个问题的答案,因为第 3 点对我来说是最不重要的。
c++ - Array Subscription: returning Reference vs proxy class method
While searching for methods for overloading Subscript('[]') operator for template class, I came across two different techniques.
First Technique:
Overloading the operator []
returning pointer to the container directly, which will allow both reading value and assigning value. A sample implementation of this technique:
With main()
as:
Output:
Second Technique:
Second technique involves declaring a proxy class and overloading the operator =
via that class. A sample implementation of this technique:
With same main()
we get same output.
I personally like the second method. But, I really want to compare these two methods. What are the major functional difference of these two techniques. What advantages each of these method have?
c++ - 是 C++ 中的 int[pointer-to-array] - 标准吗?
据我所知,可以编写以下代码:
它编译。有用。它的作用与
难道仅仅是因为:
a[b]
默认情况下被实现为宏*(a + b)
,两个代码示例都有效的事实只是意外/编译器特定的- 它在某处标准化,并且此类算法的结果在每个平台上都应该相同
假设加法应该是可交换的是合理的,但如果我们operator[]
以这种方式实现,我们已经使其他东西可交换,这可能不是我们想要的。
有趣的事实是没有pointer[pointer]
运算符,所以operator[]
也不是宏。
我知道这很糟糕。我知道这会让阅读代码的人感到困惑。但我想知道这是否只是一个意外,它在独角兽有七只腿且左脸颊上有角的遥远土地上行不通。
c++ - 有没有办法从更简洁的东西中获取 (*pointer)[ index ] 功能?
我有一个类来表示一维光谱。底层数据类型是一个简单的浮点数组。为了操纵频谱的元素,我重载了下标运算符,如下所示:
不幸的是,这个类的几乎所有用途都是作为指针,所以我现在有一些烦人的(*pointerToSpectrum)[ index ]
符号要处理。
我最初有两个想法:
我的第一个想法是重载 的下标运算符OneDSpectrum*
,但这看起来就像一个装满潜在问题和麻烦的篮子。
我的第二个想法是为 OneDSpectrums 制作某种自定义智能指针。
所以我的问题是: 获得功能是否合理?还是我应该处理大量使用?SmartPointerToSpectrum[ index ]
(*pointerToSpectrum)[ index ]
(*pointerToSpectrum)[ index ]
ios - Swift 数组下标索引中的错误?
我已经从我的项目中分离出一些可以粘贴到 Playground 中的 Swift 代码。它在正常的 Xcode 编辑和 Playground 中都会产生错误“找不到接受提供的参数的 '+' 的重载” 。该错误是指最后(非平凡)行。
如果我取消注释“let iPlus1...”这一行并进行以下编辑,Swift 将接受该代码。
如果我取消注释“let temp...”行并进行以下编辑,Swift 将再次接受该代码。
这些编辑对我来说都没有任何意义,因为它们都是看似微不足道的替换。我知道 Swift 永远不会为我隐式类型转换。在原始代码中似乎没有尝试任何隐式类型转换——所有 Ints 和 Doubles 都按预期声明。我开始相信这是 Swift 数组下标索引的错误。
c++ - 为什么 operator[] 只接受一个参数?
有很多与 operator[] 相关的问题只接受一个论点,但我找不到一个真正说明原因的问题。
matrix[0, 3]
例如,调用ElementT& operator[](SizeT x, SizeT y)
函数似乎是语言的一个非常自然的扩展。
是否有任何特殊原因(例如不兼容)该语法不在该语言中,或者除了缺乏动机实际上阻止它被添加之外的任何其他原因?
(注意:这已被标记为重复,但事实并非如此。这个问题是“为什么语言中没有这种语法?”而不是“我如何解决这个问题?”如前所述,有很多问题解决后者,但没有一个回答前者。)
swift - 在 Swift 中在 CKRecord 上定义下标时堆栈溢出
这个问题CKRecord
询问是否可以在 Swift中使用下标。虽然我已经知道如何做提问者想要的,但它的每一个排列都会给我一个堆栈溢出:
堆栈溢出发生在 getter 中。(我从未尝试过 setter,所以它也可能在那里发生。)我尝试使用objectForKey:
、objectForKeyedSubscript:
和valueForKey:
. 都产生相同的结果:堆栈溢出。
这很奇怪,因为CKRecord
肯定是用 Objective-C 编写的。为什么会递归调用 Swift 的subscript
方法?这没有道理。Nate Cook 在回答提问者时想知道为什么 Swift 不会objectForKeyedSubscript:
自动桥接。好吧,也许执行此操作的代码没有完全烘焙,但导致了这个问题。我将不得不与另一个具有objectForKeyedSubscript:
.
更新
看起来objectForKeyedSubscript:
通常是桥接的。我使用适当的方法在 Objective-C 中创建了一个类,将其添加到桥接头中,索引器就在那里并且没有问题地编译。更好的是,它在没有堆栈溢出的情况下工作。
这意味着正在发生一些非常不寻常的事情CKRecord
。
理论
如果您在 Swift 中创建一个类,该类从a 作为键继承NSObject
并在其上实现该subscript
方法,则它String
变为objectForKeyedSubscript:
. (对于“纯 Swift”类,我怀疑情况并非如此。)您可以通过将 Swift 类导入到 Objective-C 并验证它objectForKeyedSubscript:
是否存在来验证这一点。
由于CKRecord
继承自NSObject
,因此实现subscript
会覆盖默认实现。objectForKey:
此外,似乎valueForKey:
所有最终都调用objectForKeyedSubscript:
了 ,这导致(阅读:“与”相同)调用subscript
,从而导致堆栈溢出。
这可以解释为什么会发生堆栈溢出。它仍然没有解释为什么objectForKeyedSubscript:
没有自动桥接,但也许是因为 的定义setObject:forKeyedSubscript:
与规范的类型签名略有不同:- (void)setObject:(id <CKRecordValue>)object forKeyedSubscript:(NSString *)key;
. 这对 Objective-C 没有影响,但可能会导致“桥接代码”出错。毕竟,Swift 是相当新的。
c++ - 结构类型“不提供下标运算符”
我正在尝试将文件中的值读取到结构数组中。但是,我不断收到编译器错误,告诉我我的结构 Books 没有提供下标运算符,我迷路了。
结构包含在头文件中,而结构数组的声明在 main() 中。这是 functions.h 头文件中的(相关)代码:
这是 main 中的结构声明数组及其使用方式:
编译后,我收到 10 条错误消息(每次使用 array[position] 时有一条),状态为:error: type 'Books' does not provide a subscript operator