在C++中初始化私有静态数据成员的最佳方法是什么?我在头文件中尝试了这个,但它给了我奇怪的链接器错误:
class foo
{
private:
static int i;
};
int foo::i = 0;
Run Code Online (Sandbox Code Playgroud)
我猜这是因为我无法从课外初始化私人成员.那么最好的方法是什么?
我想初始化一个struct元素,在声明和初始化中拆分.这就是我所拥有的:
typedef struct MY_TYPE {
bool flag;
short int value;
double stuff;
} MY_TYPE;
void function(void) {
MY_TYPE a;
...
a = { true, 15, 0.123 }
}
Run Code Online (Sandbox Code Playgroud)
这是MY_TYPE根据C编程语言标准(C89,C90,C99,C11等)声明和初始化局部变量的方法吗?或者有什么更好或至少工作?
更新我最终得到一个静态初始化元素,我根据自己的需要设置每个子元素.
我正在初始化这样的数组数据:
public class Array {
int data[] = new int[10];
/** Creates a new instance of Array */
public Array() {
data[10] = {10,20,30,40,50,60,71,80,90,91};
}
}
Run Code Online (Sandbox Code Playgroud)
NetBeans指向该行的错误
data[10] = {10,20,30,40,50,60,71,80,90,91};
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
MyClass a1 {a}; // clearer and less error-prone than the other three
MyClass a2 = {a};
MyClass a3 = a;
MyClass a4(a);
Run Code Online (Sandbox Code Playgroud)
为什么?
我在SO上找不到答案,所以让我回答一下我自己的问题.
我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)示例:
a)循环前的声明:
double intermediateResult;
for(int i=0; i < 1000; i++){
intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
b)声明(重复)内循环:
for(int i=0; i < 1000; i++){
double intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好,一个还是b?
我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.
编辑:我对Java案件特别感兴趣.
是否可以在不指定大小的情况下创建空数组?
例如,我创建了:
String[] a = new String[5];
Run Code Online (Sandbox Code Playgroud)
我们可以创建没有大小的上面的字符串数组吗?
在某些其他语言(例如AS3)中,已经注意到如果像这样做var foo = []而不是var foo = new Array()出于对象创建和实例化的原因,初始化新数组会更快.我想知道PHP中是否有任何等价?
class Foo {
private $arr = array(); // is there another / better way?
}
Run Code Online (Sandbox Code Playgroud) {{ ... }}Java中的Double Brace初始化语法()是什么?
我知道您可以在实例化期间初始化数组,如下所示:
String[] names = new String[] {"Ryan", "Julie", "Bob"};
Run Code Online (Sandbox Code Playgroud)
有没有办法用ArrayList做同样的事情?或者我必须单独添加内容array.add()吗?
据我所知,"静态初始化块"用于设置静态字段的值,如果不能在一行中完成的话.
但我不明白为什么我们需要一个特殊的块.例如,我们将一个字段声明为静态(没有值赋值).然后编写几行代码,生成并为上面声明的静态字段赋值.
为什么我们需要在一个特殊的块这样的行这样的:static {...}?
java static initialization static-block initialization-block