重载运算符 `[ ]` 和 `:`

3
我正在尝试在C++中实现一个字符串函数,使其可以像Python一样运行。
例如,在Python中,您可以这样编码:
str = "filename.ext"
bits_0 = str[1:3]
bits_1 = str[-1:]

有一件事情要重载,那就是运算符[],但在这种情况下如何重载运算符:

1
你可以重载运算符,但你不能改变它们的语法。由于[:]在C++中不是一种语法上合法的构造,所以你无法完全复制Python的语法。 - Cameron
3个回答

6

:在C++中不是运算符。它只是作用于作用域解析运算符::或三目运算符?:的一部分。由于它不是运算符,所以无法重载。

编者注:如果您想使用Python,请使用Python。


5
我大致同意您的编辑注释,但在其他语言中模仿方便的语法糖基本上没有什么问题。特别是具有数组切片操作符将是不错的。 - Konrad Rudolph
1
“编辑说明”是错误的且不适用。该问题通过另一种语言中的示例描述了他正在寻找的功能。它从未说过他想要使用Python。他明确声明他正在使用C ++。 - Caz

5

在C++中没有operator:,因此您无法“重载”它。


0

冒号“:”不是运算符。

C++中的冒号(:)实际上是调用称为“初始化列表”的东西的运算符。初始化列表可用于以下事项:

i)调用基类构造函数

ii)在构造函数体执行之前初始化成员变量。

您可能已经看到过使用冒号标识类访问说明符的示例。例如:

private:

int x;

int y;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接