`
qiezi
  • 浏览: 497907 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

D语言中的in/inout/out参数

    博客分类:
  • D
阅读更多
private import std.stdio, std.process;

void test(int a, inout int b, out int c)
{
    writefln(a);
    writefln(b);
    writefln(c);
    a 
= 3;
    b 
= 5;
    c 
= 7;
}

void main ()
{
    
int a = 0, b = 1, c = 2;
    test(a, b, c);
    assert (a 
== 0);
    assert (b 
== 5);
    assert (c 
== 7);
    std.process.system(
"pause");
}

在上面的例子里,程序在test函数中的输出语句将输出:
0
1
0
也就是说,out参数取值是无意义的,它只用于赋值。

这里有一个很大的问题,调用test(a,b,c)时,调用者对于c的值被改变可能毫无知觉,甚至成为隐藏很深的BUG。对此,许多人建议加强检查,比如在调用时,必须指明inout/out:
test(a, inout b, out c);

似乎能够起到一些警示作用,不过这样一来,语法上倒不怎么简练了。
分享到:
评论

相关推荐

    一个变长参数的例子 (参数不固定 源代码)

    在编程语言中,变长参数(Variable-length Argument List)是一种允许函数接受可变数量参数的机制。这种特性使得函数能够处理不确定数量的输入参数,提高了代码的灵活性和可复用性。下面我们将深入探讨变长参数的...

    Java语言程序设计试卷D卷.pdf

    题目中的命令行是`java args In politics stupidity is not a handicap`,其中`args`是类名,`In`是第一个参数,`handicap`是最后一个参数。因此,程序将会输出`In handicap`,答案为D。 ### 5. 抽象类的定义 第五...

    《Java语言程序设计(一)》课后习题答案(课程编号04747)

    在Java中,方法的重写要求子类方法与超类方法的返回类型、参数列表以及访问级别都要相同。因此,不能直接重写方法名称相同但类型不同的方法。不过,可以通过方法重载(overloading)实现这一目的。 ### 数组和字符...

    linux内核 0.11版本源码 带中文注释

    // syscall0 名称中最后的0 表示无参数,1 表示1 个参数。 static inline _syscall0 (int, pause) // int pause()系统调用:暂停进程的执行,直到 // 收到一个信号。 static inline _syscall1 (int, setup, void...

    MySQL中文参考手册.chm

    <br/>10.2.3 调节服务器参数 <br/>10.2.4 MySQL 怎样打开和关闭数据库表 <br/>10.2.5 在同一个数据库中创建大量数据库表的缺点 <br/>10.2.6 为什么有这么多打开的表? <br/>10.2.7 MySQL 怎样使用内存 <br/>10.2.8 ...

    blast语言[借鉴].pdf

    4. `blastall –p blastn –i in1 –d db –o out.txt -a 2 -m 8 -W 7-F F -e 1e-10`:这个命令用于比对查询序列"in1"和数据库"db",其他参数与上一条命令相似,但`-e 1e-10`设置了更严格的E-value阈值,`-F F`表示...

    JAVA语言学习课件

    Java语言学习课件涵盖了许多核心概念,其中包括命令行参数、系统属性、I/O操作以及Collection接口系列等内容。这些是Java编程中的基础且重要的知识点。 首先,让我们深入了解一下命令行参数。在启动Java应用程序时...

    java类中静态域、块,非静态域、块,构造函数的初始化顺序

    在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块、非静态块以及构造函数时,明确它们的初始化顺序有助于避免潜在的编程错误。 ...

    VHDL硬件描述语言:第3章_VHDL语言程序的基本结构.ppt

    PORT (d0, d1, sel: IN BIT; q: OUT BIT); END ENTITY mux; ``` 这段代码指定了一个基本设计单元的实体名为mux,类属参数为m,值为1ns,端口说明包括四个信号:d0、d1、sel和q,其中d0、d1和sel为输入信号,q为输出...

    verilog HDL语言课件

    它们可以被声明为`input`(输入)、`output`(输出)或`inout`(双向)。端口列表放在模块名后的括号中。端口声明可以使用传统的格式或者ANSI C风格。 3. **数据类型及逻辑系统**:Verilog支持多种数据类型,包括`...

    汇编语言复习课件 希望对初学汇编语言的同学有点帮助

    18. **输入/输出指令**:IN和OUT指令用于与I/O设备通信,如读取端口或写入端口。 19. **DEBUG工具**:DEBUG是DOS下的一个调试工具,它的D、U、R、T、G、Q等命令用于查看内存、反汇编、读写寄存器、执行程序、退出等...

    VERILOG 74hc3738D 锁存器模型

    if (le[0]) q_out[0] <= data_in[0]; if (le[1]) q_out[1] <= data_in[1]; ... if (le[WIDTH-1]) q_out[WIDTH-1] <= data_in[WIDTH-1]; end endmodule ``` 在这个模块中: - `WIDTH`参数定义了锁存器的位宽,...

    C#语言参考(电子资料)

    ### C#语言参考知识点 #### 1. 介绍 **1.1 Hello, world** - **简介**: C# 是一种面向对象的编程语言,由微软公司开发,旨在为程序员提供强大的功能,同时保持代码的简洁性和易读性。Hello, world程序是学习任何...

    y2复习题及答案快快抢啊,而且分还低,答案真实!!!

    1. **选项A**:此说法错误,函数不仅可以带有`IN`参数,还可以带有`INOUT`或`OUT`参数。 2. **选项B**:形式参数确实可以使用数据库类型和PL/SQL类型。 3. **选项C**:此说法错误,函数的返回类型既可以是数据库类型...

    java输入输出语句.doc

    Java 语言中,输入输出语句是编程的基本组成部分。本文将详细介绍 Java 中的输入输出语句,包括标准输入输出流、控制台输入、BufferedReader 和 Scanner 的使用。 一、标准输入输出流 Java 系统预先定义了三个流...

    Linux下Socket连接超时的一种实现方法

    Linux 下 Socket 连接超时的一种实现方法 ...但是多少有些复杂,如果有象 SO_SNDTIMO/SO_RCVTIMO 一样的套接字参数可以让超时操作跳过 select 的话,世界将变得更美好。当然你还可以选用象 apr 一样提供了简单接口。

Global site tag (gtag.js) - Google Analytics