对于下面的C++代码片段:
class Foo {
int a[]; // no error
};
int a[]; // error: storage size of 'a' isn't known
void bar() {
int a[]; // error: storage size of 'a' isn't known
}
Run Code Online (Sandbox Code Playgroud)
为什么成员变量也不会导致错误?这个成员变量的含义是什么?
我通过CodeBlocks 8.02使用gcc版本3.4.5(mingw-vista special).
在Visual Studio Express 2008 - Microsoft(R)C/C++ Optimizing Compiler 15.00.30729.01 for 80x86上,我收到以下消息:
class Foo {
int a[]; // warning C4200: nonstandard extension used : zero-sized array in struct/union - Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
};
int …Run Code Online (Sandbox Code Playgroud) 假设我们正在编写一个简单的递归函数fib(n)来计算第n个Fibonacci数.现在,我们希望函数打印第n个数字.由于重复调用相同的函数,必须存在仅允许根调用打印的条件.问题是:如何在不传递任何其他参数或使用全局/静态变量的情况下编写此条件.
所以,我们正在处理这样的事情:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为root调用与所有子节点的不同之处在于返回不同的调用者,即本例中的main方法.我想知道是否可以使用此属性来编写条件以及如何编写条件.
更新:请注意,这是一个人为的例子,只是为了表达这个想法.这应该从标签中清楚.我不是在寻找标准解决方案.谢谢.