标签: declaration

何时传递参数以及何时使用实例变量

你们如何决定在本地跟踪某些东西,然后将其传递给你调用它的每个方法,或者声明一个实例变量并在方法中使用它?

我倾向于选择保存在类末尾的列表中的实例变量.但随着我的程序变得越来越复杂,这个列表变得越来越长......我认为,如果某些东西经常通过,它应该只对所有需要它的男孩和女孩可见,但后来我开始疑惑, "为什么不把一切都公之于众呢?那么根本不需要传递任何东西!"

variables methods declaration

84
推荐指数
3
解决办法
2万
查看次数

我不明白为什么会编译

我当然错过了一些东西,但我不明白为什么会编译(同时使用 g++ 和 clang++):

struct A
{
};
struct B
{
};

int main()
{
  A a(B);
}
Run Code Online (Sandbox Code Playgroud)

首先,B是一种类型……而不是值。我应该如何解释这段代码?

c++ syntax declaration most-vexing-parse

81
推荐指数
3
解决办法
7076
查看次数

半冒号课后声明括号

事先道歉可能是一个愚蠢的问题,但在C++类中,为什么在结束后的分号呢?我经常忘记它并得到编译器错误,因而浪费时间.对我来说似乎有些多余,这种情况不太可能发生.人们真的做的事情

class MyClass
{
.
.
.
} MyInstance;
Run Code Online (Sandbox Code Playgroud)

编辑:我从结构和枚举的C兼容性角度得到它,但由于类不是C语言的一部分,我想主要是在类似的声明构造之间保持一致性.我想要的是与设计原理更相关,而不是能够改变任何东西,尽管一个好的代码完成IDE可能会在编译之前捕获它.

c++ oop class declaration

74
推荐指数
5
解决办法
3万
查看次数

哪里可以而且不能在C中声明新变量?

我听说(可能来自老师)应该在程序/函数之上声明所有变量,并且在语句中声明新变量可能会导致问题.

但后来我正在阅读K&R,我发现了这句话:"变量的声明(包括初始化)可能会在左括号后面引入任何复合语句,而不仅仅是开始函数的语句".他举了一个例子:

if (n > 0){
    int i;
    for (i=0;i<n;i++)
    ...
}
Run Code Online (Sandbox Code Playgroud)

我玩了一下这个概念,它甚至可以用于数组.例如:

int main(){
    int x = 0 ;

    while (x<10){
        if (x>5){
            int y[x];
            y[0] = 10;
            printf("%d %d\n",y[0],y[4]);
        }
        x++;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么当我不允许声明变量时呢?例如,如果我的变量声明不在开括号之后呢?像这儿:

int main(){
    int x = 10;

    x++;
    printf("%d\n",x);

    int z = 6;
    printf("%d\n",z);
}
Run Code Online (Sandbox Code Playgroud)

这可能导致麻烦,具体取决于程序/机器吗?

c declaration

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

奇怪的数组返回类型

有没有人看过[]像这样的方法签名后放置的数组?

public static String mySplit(String s)[] {
    return s.split(",");
}

public static void main(String... args) {
    String[] words = mySplit("a,b,c,d,e");
    System.out.println(Arrays.toString(words));
}
Run Code Online (Sandbox Code Playgroud)

版画

[a, b, c, d, e]
Run Code Online (Sandbox Code Playgroud)

在过去,奇怪的符号一直是"C"兼容性,但我不会想象有人在C中写这个.

有谁知道为什么这甚至被允许?

我正在使用Java 7更新10,以防万一.

这在Java 6中也是如此.http://ideone.com/91rZV1


BTW这不编译,我也不期望它

public static <T> List mySplit(String s)<T> {
    return Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)

java arrays syntax declaration

72
推荐指数
3
解决办法
2224
查看次数

为什么Go不允许嵌套函数声明(函数内部的函数)?

编辑:如果不清楚我在问什么:不允许嵌套函数声明可以缓解哪些问题?

Lambdas按预期工作:

func main() {
    inc := func(x int) int { return x+1; }
}
Run Code Online (Sandbox Code Playgroud)

但是,不允许在声明中使用以下声明:

func main() {
    func inc(x int) int { return x+1; }
}
Run Code Online (Sandbox Code Playgroud)

出于什么原因,不允许使用嵌套函数?

declaration function go

71
推荐指数
5
解决办法
3万
查看次数

复杂的C声明

我刚刚在互联网上查看了一些代码,发现了这个:

float * (*(*foo())[SIZE][SIZE])()
Run Code Online (Sandbox Code Playgroud)

我如何阅读此声明?是否有一套特定的规则来阅读这些复杂的声明?

c c++ function-pointers declaration

69
推荐指数
3
解决办法
3157
查看次数

声明中的新C++ 11成员初始化功能是否使初始化列表过时了?

使用C++ 11,我们现在可以在头声明中初始化类成员:

class aClass
{
    private:
        int mInt{100};
    public:
         aClass();
        ~aClass();
};
Run Code Online (Sandbox Code Playgroud)

所以我有点困惑.传统上,构造函数中的初始化列表已用于成员初始化:

aClass::aClass()
: mInt(100)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

声明中的新C++ 11成员初始化功能是否使初始化列表过时了?如果没有,一个优于另一个的优势是什么?什么情况会使声明初始化有利,或初始化列表有利?应该何时使用另一个?

c++ constructor initialization declaration c++11

68
推荐指数
3
解决办法
4万
查看次数

在声明时将键/值添加到Dictionary

我想今天非常容易.在C#中,它:

Dictionary<String, String> dict = new Dictionary<string, string>() { { "", "" } };
Run Code Online (Sandbox Code Playgroud)

但是在vb中,以下内容不起作用.

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) (("",""))
Run Code Online (Sandbox Code Playgroud)

我很确定有一种方法可以在声明中添加它们,但我不确定如何.是的,我想在声明中添加它们,而不是任何其他时间.:)所以希望它是可能的.感谢大家.

我也尝试过:

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) ({"",""})
Run Code Online (Sandbox Code Playgroud)

和...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {("","")}
Run Code Online (Sandbox Code Playgroud)

和...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {{"",""}}
Run Code Online (Sandbox Code Playgroud)

vb.net dictionary declaration visual-studio-2008

65
推荐指数
3
解决办法
5万
查看次数

JavaScript对象属性是否可以引用同一对象的另一个属性?

我最近尝试创建这样的对象:

var carousel = {
      $slider: $('#carousel1 .slider'),
      panes: carousel.$slider.children().length
    };
Run Code Online (Sandbox Code Playgroud)

我的意图是通过缓存$('#carousel1 .slider')对象属性的结果来提高jQuery的选择器性能,并保持代码简洁和相对干燥.

但是,这不起作用.当代码执行时,它在尝试解析值时抛出异常panes,抱怨carousel未定义.

这是有道理的,因为我假设carousel在赋值语句完全执行之前没有完全声明.但是,我想避免诉诸于此:

var carousel = {};
carousel.$slider = $('#carousel1 .slider');
carousel.panes = carousel.$slider.children().length;
Run Code Online (Sandbox Code Playgroud)

这并没有太糟糕,但是carousel对象将有更多依赖于其他属性值的属性,因此很快就会变得冗长.

我尝试过使用this,但无济于事.我可能没有正确使用它,或者这可能不是一个有效的方法.

对象的属性是否有一种方法可以引用同一对象的其他属性,而该对象仍然被声明?


基于Matthew Flaschen和casablanca的答案(谢谢,伙计们!),我认为这些是我最终得到的实际代码的版本,基于每种方法:

// Matthew Flaschen

var carousel = new (function() {
  this.$carousel = $('.carousel');
  this.$carousel_window = this.$carousel.find('.window');
  this.$carousel_slider = this.$carousel.find('.slider');
  this.$first_pane = this.$carousel.find('.slider').children(':first-child');
  this.panes = this.$carousel_slider.children().length;
  this.pane_gap = this.$first_pane.css('margin-right');
})();
Run Code Online (Sandbox Code Playgroud)

// casablanca

var $carousel = $('.carousel'),
    $carousel_slider = …
Run Code Online (Sandbox Code Playgroud)

javascript properties declaration object variable-assignment

63
推荐指数
2
解决办法
3万
查看次数