c++ - C/C++ 中的运算符在哪里定义以及它们是如何在这些语言中实现的?

标签 c++ c

<分区>

编译器如何知道哪个功能与哪个运算符关联?

最佳答案

这是一个有点开放性的问题。进一步询问,您是在要求我们写一本书。多本书,事实上:

  • 一本关于现代代数的书,解释了什么是数字以及那些我们认为理所当然的数学运算的工作原理;
  • 多本计算机科学书籍,例如结构和算法、汇编语言和编译器理论,它们描述了如何将高级语言翻译成 CPU 可以执行的指令;
  • 多本计算机工程书籍,描述了 CPU、算术逻辑单元、浮点处理器、门和计算机科学家认为理所当然的其他计算机内部结构。

所以,一个简短但可能有点不尽如人意的答案:
运算符在 C 中有固定的含义。C ISO/IEC 标准在某种程度上指定了该含义。该标准没有指定 1+1=2 等。那是您在高中和之前在较低级别的代数类(class)中学到的知识。我们认为理所当然的东西背后的理论是您在现代代数课上学到的东西(通常由数学学生在学习了多个微积分课后学习)。

运算符在 C++ 中具有更灵活的含义。运算符可以在 C++ 中重载。没有这种重载,C++ 中运算符的含义与 C 中的几乎相同。但是,C++ 使程序员能够定义 foo+barfoo< 的情况下的含义bar 是一些用户定义类型的实例。该标准指定了这些重载运算符的签名,并指定了实现如何应用这些重载。 foobar 究竟如何相加:这取决于重载运算符的实现者。

关于c++ - C/C++ 中的运算符在哪里定义以及它们是如何在这些语言中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747581/

相关文章:

c++ - 使用原始输入同时获取两只老鼠的数据

c++ - 通过 C++ 将 QML 项作为图像复制到剪贴板

c - 从字符串中删除元音。

c - 为什么指针不在栈上?

c - C语言中的if-else条件

c++ - 指向 vector 元素的指针

c++ - 为什么 Q_FOREACH 宏会破坏 VS2010 智能感知?

c++ - 没有用于调用 FMOD::Studio::System::setListenerAttributes() 的匹配函数

编译剪贴板的内容

c - Emacs - 有关 hide-ifdef-mode 的问题