📄 00563.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>7.17 操作符过载</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<meta name="generator" content="Doc-O-Matic" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="STYLESHEET" href="default.css" type="text/css" />
<script type="text/javascript" src="scripts.js"></script>
</head>
<body class="Element700" onload="onBodyLoadEx('systemverilog31a.html', 'topic', '00563.html');" onmousedown="onBodyMouseDown();">
<!-- Begin Popups -->
<div class="Element801" id="popup00136">
<div class="Element800">
<div class="Element14">
链接</div>
<div class="Element11">
<div class="Element10">
<a href="00860.html" target="topic">第七章 操作符与表达式</a></div>
</div>
</div>
</div>
<!-- End Popups -->
<!-- Begin Page Header -->
<div class="Element710" id="areafixed">
<div class="Element92">
<table width="100%" cellspacing="0" cellpadding="0">
<tr><td width="33%">
<div class="Element1">
<a href="#" onmousedown="showPopup(this, 'popup00136');"><img src="seealsolink.png" border="0" alt="" title=""></a> SystemVerilog 3.1a语言参考手册</div>
</td><td width="34%">
<div class="Element2">
</div>
</td><td width="33%">
<div class="Element90">
<a href="00562.html" target="topic"><img src="btn_prev_lightblue.gif" border="0" alt="Previous" title="Previous" onmouseover="switchImage(this, 'btn_prev_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_prev_lightblue.gif');"></a><a href="00860.html" target="topic"><img src="btn_up_lightblue.gif" border="0" alt="Up" title="Up" onmouseover="switchImage(this, 'btn_up_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_up_lightblue.gif');"></a><a href="00564.html" target="topic"><img src="btn_next_lightblue.gif" border="0" alt="Next" title="Next" onmouseover="switchImage(this, 'btn_next_lightblue_hover.gif');" onmouseout="switchImage(this, 'btn_next_lightblue.gif');"></a></div>
</td></tr></table><div class="Element5">
7.17 操作符过载</div>
</div>
</div>
<!-- End Page Header -->
<!-- Begin Client Area -->
<div class="Element720" id="areascroll">
<div class="Element721">
<!-- Begin Page Content -->
<div class="Element58">
<a name="描述"></a><div class="Element11">
<div class="Element10">
<p class="Element10">
有多种算术算法可能非常有用:饱和算法,任意尺寸的浮点数运算,进位保留算法等。使用普通的算术操作符而不是依赖于函数调用有利于代码的可读性。 </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00239');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00239"><pre class="Element12">overload_declaration ::= <span style="color: #008000">// 引用自附录A.2.8</span>
<strong><span style="color: #FF0000">bind</span></strong> overload_operator <strong><span style="color: #FF0000">function</span></strong> data_type function_identifier <strong><span style="color: #FF0000">(</span></strong>overload_proto_formals<strong><span style="color: #FF0000">);</span></strong>
overload_operator ::= <strong><span style="color: #FF0000">+</span></strong> | <strong><span style="color: #FF0000">++</span></strong> | <strong><span style="color: #FF0000">–</span></strong> | <strong><span style="color: #FF0000">––</span></strong> | <strong><span style="color: #FF0000">*</span></strong> | <strong><span style="color: #FF0000">**</span></strong> | <strong><span style="color: #FF0000">/</span></strong> | <strong><span style="color: #FF0000">%</span></strong> | <strong><span style="color: #FF0000">==</span></strong> | <strong><span style="color: #FF0000">!=</span></strong> | <strong><span style="color: #FF0000"><</span></strong> | <strong><span style="color: #FF0000"><=</span></strong> | <strong><span style="color: #FF0000">></span></strong> | <strong><span style="color: #FF0000">>=</span></strong> | <strong><span style="color: #FF0000">=</span></strong>
overload_proto_formals ::= data_type {<strong><span style="color: #FF0000">,</span></strong> data_type}</pre></div></div>
<p class="Element10" style="text-align: center">
<strong>语法 7-3 — 操作符重载语法(摘录自附录A)</strong></p><p class="Element10">
</p>
<p class="Element10">
过载声明使得算术操作符能够应用于一般情况下它们不能使用的数据类型,例如非压缩结构体。它不会改变操作符原本的含义,也就是说,当使用操作符过载的时候,原来的代码不会改变其运算行为。 </p>
<p class="Element10">
</p>
<p class="Element10">
过载声明将一个操作符链接到一个函数原型。在使用时,首先检查函数自变量是否匹配,然后再检查结果类型是否匹配。多个函数可以具有相同的自变量及不同的返回值。如果操作符使用在一个自决关联文中,而且不存在一个期望的返回类型,那么必须使用强制类型转换来选择正确的函数。类似地,如果由于嵌套操作符而导致可能具有多个期望的类型,并且可以与多于一个函数相匹配,那么也必须使用强制类型转换来选择正确的函数。 </p>
<p class="Element10">
</p>
<p class="Element10">
一个期望的结果类型存在于下列任意一个关联文中:</p>
<ul class="Element630">
<li class="Element600">一条赋值语句或赋值表达式的右侧</li>
<li class="Element600">一个任务或函数调用的真实输入参数</li>
<li class="Element600">一个模块、接口或程序的输入端口连接</li>
<li class="Element600">一个模块、接口、程序或类的真实参数</li>
<li class="Element600">具有明确比较的关系操作符</li>
<li class="Element600">在一个强制类型转换中</li>
</ul><p class="Element10">
例如,假定<i>float</i>是一个结构体类型: </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00240');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00240"><pre class="Element12"><span style="color: #0000FF">typedef struct</span> <span style="color: #800080">{</span>
<span style="color: #0000FF">bit</span> sign<span style="color: #800080">;</span>
<span style="color: #0000FF">bit</span> <span style="color: #800080">[</span><span style="color: #FF0000">3</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> exponent<span style="color: #800080">;</span>
<span style="color: #0000FF">bit</span> <span style="color: #800080">[</span><span style="color: #FF0000">10</span><span style="color: #800080">:</span><span style="color: #FF0000">0</span><span style="color: #800080">]</span> mantissa<span style="color: #800080">;</span>
<span style="color: #800080">}</span> float<span style="color: #800080">;</span></pre></div></div>
<p class="Element10">
通过调用下述过载声明中所指示的函数,<span style="color: #800080">+</span>操作符能够应用于这个结构体。 </p><div class="Element170">
<a href="#" onclick="CopyElementToClipboard('code00241');">Copy Code</a></div>
<div class="Element13"><div class="Element12" id="code00241"><pre class="Element12"><span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddif<span style="color: #800080">(</span>int<span style="color: #800080">,</span> float<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddfi<span style="color: #800080">(</span>float<span style="color: #800080">,</span> int<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddrf<span style="color: #800080">(</span>real<span style="color: #800080">,</span> float<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddrf<span style="color: #800080">(</span>shortreal<span style="color: #800080">,</span> float<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddfr<span style="color: #800080">(</span>float<span style="color: #800080">,</span> real<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddfr<span style="color: #800080">(</span>float<span style="color: #800080">,</span> shortreal<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> faddff<span style="color: #800080">(</span>float<span style="color: #800080">,</span> float<span style="color: #800080">);</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> fcopyf<span style="color: #800080">(</span>float<span style="color: #800080">);</span> <span style="color: #008000">// 一元操作符 +</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> fcopyi<span style="color: #800080">(</span>int<span style="color: #800080">);</span> <span style="color: #008000">// 一元操作符 +</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> fcopyr<span style="color: #800080">(</span>real<span style="color: #800080">);</span> <span style="color: #008000">// 一元操作符 +</span>
<span style="color: #0000FF">bind</span> <span style="color: #800080">+</span> <span style="color: #0000FF">function</span> <span style="color: #0000FF">float</span> fcopyr<span style="color: #800080">(</span>shortreal<span style="color: #800080">);</span> <span style="color: #008000">// 一元操作符 +</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -