你们可能已经被出卖了,你们自己也是如此。->是操作符,它检索结构(C)或类(C++)的成员。
但是,我怀疑它们是否是运算符--因为,如果它们是运算符,它们的输入类型是什么?此外,双方的标识符是相互依赖的--例如+运算符缺乏的特性。
如果这是正确的-在什么意义上,这些仍然被标记为运算符在实践中,以及他们的形式定义对语言理论。
发布于 2010-11-28 01:34:02
此引用说明它们都是C++中的运算符:
http://www.cplusplus.com/doc/tutorial/operators/
这还不够权威吗?
发布于 2010-11-28 01:39:36
假设唯一可以作为参数传递给运算符的类型是可以在语言中定义的类型。
我认为,编译器可以识别的任何类型都可以作为参数传递,包括内部类型(如“标识符”)。操作符将在其AST表示中包含两个参数,这足以允许您定义语义。
另一个论点是,语言理论可能为你的词汇表提供了一套定义,但这并不是唯一的一种。
例如,操作人员可能是操作机器的人。这个定义与编程理论无关,但它不会阻止我在特定于领域的语言中使用与机器操作有关的关键字。类似地,“运算符”一词在数学中的定义比编程理论的定义更广--而且这个定义并不仅仅通过使用一种编程语言就失效了。
换句话说--如果你不叫它接线员,你会怎么称呼它?
编辑
为了澄清,我的第一个参数是指使用运算符(调用)的语法。这些运算符具有正确的参数,这些参数是标识符(成员名称),C++语言无法使用数据类型表示这些参数。C++语言确实有成员指针,但它们与成员不一样--就像变量与指向该变量的指针不同一样。
我想这就是问题所指的。这些运算符的正确参数有一种类型,不能用该语言表示或正常操作。
当该语法映射到重载的operator->函数时会发生什么,这是另一回事。函数不是操作符,而是操作符的实现方式。
发布于 2010-11-28 01:33:17
我认为,您可以使用" operator“关键字重载->操作符这一事实应该是一个死胡同。
聪明的指针经常这样做:
template<class T>
struct myPtr {
T *operator ->() { return m_ptr; }
private:
T *m_ptr;
};.不是可重载的,但定义上也是一个运算符。
https://stackoverflow.com/questions/4294857
复制相似问题