你们如何决定在本地跟踪某些东西,然后将其传递给你调用它的每个方法,或者声明一个实例变量并在方法中使用它?
我倾向于选择保存在类末尾的列表中的实例变量.但随着我的程序变得越来越复杂,这个列表变得越来越长......我认为,如果某些东西经常通过,它应该只对所有需要它的男孩和女孩可见,但后来我开始疑惑, "为什么不把一切都公之于众呢?那么根本不需要传递任何东西!"
我当然错过了一些东西,但我不明白为什么会编译(同时使用 g++ 和 clang++):
struct A
{
};
struct B
{
};
int main()
{
A a(B);
}
Run Code Online (Sandbox Code Playgroud)
首先,B是一种类型……而不是值。我应该如何解释这段代码?
事先道歉可能是一个愚蠢的问题,但在C++类中,为什么在结束后的分号呢?我经常忘记它并得到编译器错误,因而浪费时间.对我来说似乎有些多余,这种情况不太可能发生.人们真的做的事情
class MyClass
{
.
.
.
} MyInstance;
Run Code Online (Sandbox Code Playgroud)
编辑:我从结构和枚举的C兼容性角度得到它,但由于类不是C语言的一部分,我想主要是在类似的声明构造之间保持一致性.我想要的是与设计原理更相关,而不是能够改变任何东西,尽管一个好的代码完成IDE可能会在编译之前捕获它.
我听说(可能来自老师)应该在程序/函数之上声明所有变量,并且在语句中声明新变量可能会导致问题.
但后来我正在阅读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)
这可能导致麻烦,具体取决于程序/机器吗?
有没有人看过[]像这样的方法签名后放置的数组?
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) 编辑:如果不清楚我在问什么:不允许嵌套函数声明可以缓解哪些问题?
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)
出于什么原因,不允许使用嵌套函数?
我刚刚在互联网上查看了一些代码,发现了这个:
float * (*(*foo())[SIZE][SIZE])()
Run Code Online (Sandbox Code Playgroud)
我如何阅读此声明?是否有一套特定的规则来阅读这些复杂的声明?
使用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#中,它:
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) 我最近尝试创建这样的对象:
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
declaration ×10
c++ ×4
c ×2
syntax ×2
arrays ×1
c++11 ×1
class ×1
constructor ×1
dictionary ×1
function ×1
go ×1
java ×1
javascript ×1
methods ×1
object ×1
oop ×1
properties ×1
variables ×1
vb.net ×1