问题标签 [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++ 中重载下标运算符
考虑以下类:
问题:有没有办法重载/覆盖/重新定义下标运算符 st 例如,可以访问三个选项中的一个选择向量。
即,假设:SocialPrefNode ordering{ }
。我希望能够像中一样使用下标运算符,ordering[ i ]
并且能够在类的三个向量中选择一个,以便下标/索引 i 起作用。
示例:想要访问 a 的preferences
向量中的第三个元素SocialPrefNode ordering
。然后,一个人确实ordering[ 2 ]
可以访问所需的元素。
c - 为什么下面代码中的 printf 语句打印的是值而不是垃圾值?
谁能解释一下 -2[array-2] 是如何工作的以及为什么在这里使用 [ ] ?这是我作业中的一个问题,它给出了输出“-10”,但我不明白为什么?
c - 指针是否支持“数组样式索引”?
(自我回答的问答——这件事不断出现)
我假设读者知道指针算法是如何工作的。
教师/C 书籍一直告诉我,我不应该*(ptr + i)
像上面的例子那样使用,因为“指针支持数组样式索引”,我应该使用它ptr[i] = value;
。那里没有争论 - 更容易阅读。
但是通过 C 标准,我发现没有什么叫做“数组样式索引”。事实上,运算符[]
并不期望任何一个操作数是一个数组,而是一个指针或一个整数!
6.5.2.1 数组下标
约束
其中一个表达式应具有类型''指向完整对象类型的指针'',另一个表达式应具有整数类型,并且结果具有类型''<em>type''。
为什么数组下标运算符不期望数组?标准错了吗?我的老师/C 书是否混淆了?
c++ - 如何重载下标运算符以返回可以是左值的可选?
我通过实现一个八叉树类来学习一些 C++ 特性。我希望此类上的下标运算符返回与index 对应的八分圆。我应该如何在类上定义下标运算符,以便我可以(i)分配给结果和(ii)检查结果是否为空?
目标 (i) 习惯上通过使下标运算符返回一个引用来实现。但是引用不能引用任何内容,如果八分圆为空,这是一个合法的返回值。
目标 (ii) 可以通过使下标运算符返回一个可选项来实现。但是,修改指向八分圆的指针变得不简单——用std::optional<T>
,T
不能是引用。
这是损坏的示例(除了在实际代码中的所有实例optional
都带有前缀,experimental
因为我的 GCC 仅对 C++17 具有实验性支持)。
正如预期的那样,编译器以丰富多彩的方式拒绝可选引用。
我确信有一种方法可以重载赋值,这样我就可以返回一个可选的,然后像main
上面那样分配给它。感谢您的任何指点!;-)
c++ - 编写下标非成员函数
我猜这在 C++ 中是不合法的,但我想我会问,给定一个我不拥有的结构:
我想为它写一个非成员下标运算符:
错误:
int& operator[](foo&, std::size_t)
必须是非静态成员函数
c++ - 为什么我的代码无法处理大型数组输入(> 10000)?
我为 < 10000 的值尝试了相同的代码,它工作正常...我已经用 long long int 替换了所有 int 然后它还显示矢量下标超出范围错误...
样本输入:
我期待 0 但它显示“向量下标超出范围”
c++ - 由于运行时错误,无法从二维向量获取输出
我正在编写一个程序,它将接收二维向量的值并为它们提供输出。但是,我遇到了运行时错误。
c - 在 C 程序中获取指针问题
正如我们所知,数组仅在 C 中通过指针传递,那么swap1(arr[i],arr[j])
下面意味着两个指针将传递给函数,swap1()
那么为什么swap1(arr[i],arr[j])
会给我错误?根据swap1()
应该传递两个指针的函数原型,我正在传递它。
另一方面,当我实际传递地址swap1(&arr[i],&arr[j])
时,它工作正常,这是显而易见的。
c++ - unique_ptr 拥有的对象的索引运算符
我正在做一个 c++ 项目。我需要放入一个 std::vector 不同的类。我发现(单个向量中的不同类的对象?)可以通过创建具有通用类型的类然后将指针指向向量来做到这一点。在这种情况下,我可以将指针转换为我需要的类型。这对我来说很清楚。
还提到,原则上不仅可以使用指针,还可以使用 smart_pointers,即std::vector<std::unique_ptr<TMyClass>>
. 这就是我的问题开始的地方。TMyClass
具有索引运算符 ( operator[]
)。
可以说我有std::vector<std::unique_ptr<TMyClass>> A
。我尝试TMyClass
像这样访问对象的元素,或者A[0][0]
但是当我编译时出现错误:A[0].get()[0]
(A[0])[0]
[bcc64 错误] 类型“value_type”(又名“std::unique_ptr<.....>”)不提供下标运算符
我如何告诉编译器第二个索引与TMyClass
object 而不是与unique_ptr
?如果有人向我解释如何在这种情况下访问元素,我将不胜感激。
c++ - 重载下标运算符未按预期工作
我有一个String
重载下标运算符的结构。但这似乎不起作用。
Visual Studio 给我以下错误:
不存在从“String”到“char”的合适转换函数