第一行代码为什么能编译成功,而第二行不能?
为什么可以将
为什么可以将
a
作为构造函数的参数,而b
不行?它们不是做着相同的事情吗?class Foo { Foo &operator =(Foo const &); /* Disable assignment */ };
int main()
{
Foo a = a; // OK
Foo b(b); // error C2065: 'b' : undeclared identifier
}
更新
由于似乎与编译器有关,这个问题看起来比我想象的更严重。
所以我想问题的另一个部分是,以下代码是否有效?
在GCC中它会报错,但Visual C++可以正常执行。
int main()
{
int i = 0;
{ int *i(&i); }
return i;
}
int a=a+100;
和int a(a+100);
这样的代码在语法方面是正确的。但根据它们是在静态存储期还是自动存储期创建的,它们可能会引起未定义行为。 - Nawazint i(i)
这样的代码,以便捕获在外部范围中定义的i
的副本,如果你是这个意思的话。显然,在我问这个问题之后我才知道它们引用了同一个变量... - user541686