shu*_*alo 5 c c++ programming-languages operators
你可能已被打过,自己也是为了自己.和 - >是检索结构(C)或类(C++)成员的运算符.
但是,我怀疑它们是运算符 - 因为,如果它们是运算符,它们的输入类型是什么?此外,两侧的标识符是相互依赖的 - 例如+运算符缺少的特征.
如果这是正确的 - 在什么意义上这些仍然在实践中被标记为运算符,以及它们在语言理论方面的正式定义是什么.
您假设可以作为参数传递给运算符的唯一类型是可以在语言中定义的类型.
我认为编译器可以识别的任何类型都可以作为参数传递,包括内部类型,如"identifier".运算符在其AST表示中将有两个参数,这足以允许您定义语义.
另一个论点是语言理论可能为您的词汇提供一套定义,但它不是唯一的定义.
例如,操作员可以是操作机器的人.该定义与编程理论无关,但它不会阻止我使用特定于域的语言中的关键字来表达与机器操作有关的内容.类似地,术语"运算符"在数学中具有比编程理论特定的更宽的定义 - 并且该定义不仅仅通过使用编程语言而无效.
换句话说 - 如果你没有把它称为操作员,你会怎么称呼它?
编辑
为了澄清,我的第一个参数是指使用运算符(调用)的语法.这些运算符具有正确的参数,这些参数是标识符 - 成员名称 - C++语言无法使用数据类型表达.C++语言确实有成员指针,但它们与成员不同 - 就像变量与指向该变量的指针不同.
我认为这就是提到的问题.这些运算符的正确参数具有一种在语言中无法正常表达或操作的类型.
将语法映射到重载operator->函数时会发生什么是另一回事.该功能不是运营商 - 它只是运营商的实施方式.
我认为你可以->使用"operator"关键字重载运算符的事实应该是一个死的赠品.
智能指针经常这样做:
template<class T>
struct myPtr {
T *operator ->() { return m_ptr; }
private:
T *m_ptr;
};
Run Code Online (Sandbox Code Playgroud)
在.不重载,也是通过定义操作.
该参考文献说它们都是 C++ 中的运算符:
http://www.cplusplus.com/doc/tutorial/operators/
这还不够权威吗?