标签: variable-declaration

变量声明是否应该放在循环之外?

声明在循环外部的循环中使用的变量而不是内部更好吗?有时我会看到在循环中声明变量的示例.这是否有效地导致程序在每次循环运行时为新变量分配内存?或者.NET足够聪明,知道它真的是同一个变量.

例如,请参阅此答案中的以下代码.

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[32768];
    while (true)
    {
        int read = input.Read (buffer, 0, buffer.Length);
        if (read <= 0)
            return;
        output.Write (buffer, 0, read);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个修改过的版本会更有效吗?

public static void CopyStream(Stream input, Stream output)
{
    int read; //OUTSIDE LOOP
    byte[] buffer = new byte[32768];
    while (true)
    {
        read = input.Read (buffer, 0, buffer.Length);
        if (read <= 0)
            return;
        output.Write (buffer, 0, read);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# loops variable-declaration

9
推荐指数
1
解决办法
1531
查看次数

什么是'@('在这个Perl代码中做什么?

在此代码段中:

    use strict;
    use warnings;
    use Data::Dumper;
    my $r = [qw(testing this thing)];

    print Dumper($r);
    foreach my $row (@({$r})
    {
        print "$row\n";
        $row .= 'mod';
    }
    print Dumper($r);
    print Dumper(@({$r});
Run Code Online (Sandbox Code Playgroud)

我发现foreach 中的' ('之后' @'导致它无法正确循环.我不知道为什么这个代码甚至可以工作,因为没有结束括号.这是做什么的?它看起来是在动态创建一个新的变量,但不应该use strict"已经解雇了什么?

请帮助解释一下这@(是什么以及为什么它仍然在没有结束括号的情况下运行.

perl variable-declaration

9
推荐指数
1
解决办法
294
查看次数

多声明中的第二个int是否始终设置为1?

这篇Code Golf帖子中,声称"定义中的第二个变量始终设置为1",这使得它成为一个格式良好的行:

int i=-1,c,o,w,b,e=b=w=o=c;
Run Code Online (Sandbox Code Playgroud)

据说除了i设置为1 之外的所有内容c都是自动1.

我以为我知道一些C,并认为这是非法的(是UB,如果有任何随机堆栈内容的结果).

C真的设置c为1吗?

c declaration definition undefined-behavior variable-declaration

9
推荐指数
2
解决办法
172
查看次数

我应该在函数中使用静态变量来防止重新计算值吗?

我已经写了一段时间的C ++代码,但是一段时间以来,我一直在想一些事情,而没有找到一个明确的答案。

我的意思是:假设我有一个函数(可以是方法,可以是static,但不一定),并且该函数使用一些“重”对象(例如无法确定的字符串)在编译时很容易,但这在整个执行过程中是恒定的)。我实际遇到的一个示例如下:

/* Returns an endpoint for an API
 * Based on the main API URL (getApiUrl())
 */
virtual QString getEndPointUrl() const override
{
    QString baseUrl = getApiUrl();
    QString endpointUrl = QString("%1/%2").arg(baseUrl, "endpoint");
    return endpointUrl;
}
Run Code Online (Sandbox Code Playgroud)

当然,这只是一个例子(我知道QStrings具有自己独特的Qt内存管理功能,但是让我们承认我们正在处理基本对象)。

执行以下操作是一个好主意吗?

virtual QString getEndPointUrl() const override
{
    /* We determine baseUrl only once */
    static const QString baseUrl = getApiUrl();
    /* We compute endpointUrl only once */
    static const QString endpointUrl = QString("%1/%2").arg(baseUrl, "endpoint");
    return endpointUrl; …
Run Code Online (Sandbox Code Playgroud)

c++ performance member-functions variable-declaration

9
推荐指数
2
解决办法
284
查看次数

C中的int*ptr和int*ptr有什么区别?

我在C上相当新,我不知道以下两个变量声明之间的区别:

int* ptr;
int *ptr;
Run Code Online (Sandbox Code Playgroud)

我认为在宣言中int* ptr;,ptr价值不能改变,而声明可以改变,int *ptr;

我不确定是不是这样.

请帮助我理解这两个声明背后的概念.

c syntax pointers variable-declaration

8
推荐指数
1
解决办法
1万
查看次数

Java开关:变量声明和范围

Java编译器如何处理以下交换机块?'b'变量的范围是什么?

请注意,'b'变量仅在switch语句的第一个分支中声明.尝试在第二个分支中声明它也会导致"重复的局部变量"编译错误.

    int a = 3;
    switch( a ) {
    case 0:
        int b = 1;
        System.out.println("case 0: b = " + b);
        break;
    case 1:
        // the following line does not compile: b may not have been initialized
        // System.out.println("case 1 before: b = " + b);
        b = 2;
        System.out.println("case 1 after: b = " + b);
        break;
    default:
        b = 7;
        System.out.println("default: b = " + b);
    }
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码用java 1.6编译器编译.

java scope initialization switch-statement variable-declaration

8
推荐指数
2
解决办法
6516
查看次数

如何在C中创建字符串类型变量

如何在C中声明字符串变量?

背景

在我学习的基础知识的过程中,我试图将我最古老的程序之一移植Bob到C.在程序中,脚本会询问用户有关他或她自己的信息,然后吐出响应.几乎所有这些变量都raw_input用于它们的信息 - 变量是字符串.但是,我发现没有办法声明C变量.

到目前为止,我已经尝试将变量声明为类型char,int.这是代码,在您闲暇时切换类型.

int main(int argc, const char * argv[])
{

    int name;
    printf("What is your name?");
    scanf("%s",&name);
    printf("Your name is %s", name );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误信息

当我运行此代码时,Xcode返回一些奇怪的东西.这部分的全球化 - 全球突出显示.

0x7fff96d2b4f0:  pcmpeqb(%rdi), %xmm0
Run Code Online (Sandbox Code Playgroud)

最后,雅虎答案说我不得不使用一种名为a的东西character array.它发布于5年前,所以我认为有更好的方法.

编辑

我正在按照C编程的教程学习.

c string variable-declaration

8
推荐指数
1
解决办法
7万
查看次数

将布尔值设置为false冗余?

我已经阅读了关于这个主题的几个先前提出的问题和答案[或非常相似],但他们都没有真正解决这一点.在声明一个新的布尔变量时,将它初始化为false是多余的[例如不必要]吗?

boolean selectedZone = false;
Run Code Online (Sandbox Code Playgroud)

而不是宣布

boolean selectedZone;
Run Code Online (Sandbox Code Playgroud)

我看过的其他帖子是 为什么Java的默认值为Boolean设置为true?java中布尔值的默认值

java boolean initialization variable-declaration

8
推荐指数
2
解决办法
2477
查看次数

告诉Swift编译器一个对象的类型,而不是推断?

我已经做了几个月的Swift编程了,我一直很好奇这个......

告诉Swift编译器声明中对象的类型是否有优势?即let image: UIImage = UIImage()

与不告诉编译器并让它在运行时推断类型相比.即let image = UIImage()

我认为告诉编译器对象类型而不是推断它的类型会更有效.我知道这个问题也适用于Objective-C语法,所以我会在标签中添加它.

variable-declaration ios swift

8
推荐指数
1
解决办法
133
查看次数

F#:解构与受歧视的联合绑定

open System

let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q

let y = Some(1, 2)
try
  let None = y
  ()
with
  | ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
Run Code Online (Sandbox Code Playgroud)

当我取消注释最后一行时,编译器拒绝代码抱怨

/home/rRiy1O/prog.fs(16,19):错误FS0039:值或构造函数'r'未定义
/home/rRiy1O/prog.fs(16,21):错误FS0039:值或构造函数的' 没有定义

是不允许在解构中使用枚举let

但首先,甚至当我注释掉最后一行...什么在这里干什么?这是输出:

A (1, 2)
B 1 2
D Some (1, 2)
Run Code Online (Sandbox Code Playgroud)

更新

为了记录,这是固定版本: …

f# pattern-matching destructuring let variable-declaration

8
推荐指数
1
解决办法
800
查看次数