可能从来没有以这种方式实现,因为从来没有需要。
假设您想在普通的C语言中编写类似于以下内容的东西:
int myfunction(int value)
{
if (value==0)
return 0;
int result = value * 2;
return result;
}
那么您可以轻松地将其重写为有效的C语言,如下所示:
int myfunction(int value)
{
int result;
if (value==0)
return 0;
result = value * 2;
return result;
}
首先声明变量,然后设置其值不会对性能造成任何影响。
然而,在C++中就不是这样了。在下面的例子中,function2将比function1慢:
double function1(const Factory &factory)
{
if (!factory.isWorking())
return 0;
Product product(factory.makeProduct());
return product.getQuantity();
}
double function2(const Factory &factory)
{
Product product;
if (!factory.isWorking())
return 0;
product = factory.makeProduct();
return product.getQuantity();
}
在function2函数中,即使工厂不工作,也需要构造产品变量。随后,工厂制造产品,然后赋值运算符需要复制产品(从makeProduct的返回值到产品变量)。在function1函数中,只有在工厂工作时才会构造产品,即使是这样,也调用复制构造函数而非普通构造函数和赋值运算符。
然而,我期望现代的好的C++编译器会优化这段代码,但在最初的C++编译器中可能不是这种情况。
第二个例子如下:
double function1(const Factory &factory)
{
if (!factory.isWorking())
return 0;
Product &product = factory.getProduct();
return product.getQuantity();
}
double function2(const Factory &factory)
{
Product &product;
if (!factory.isWorking())
return 0;
product = factory.getProduct();
return product.getQuantity();
}
在这个例子中,function2 是无效的。引用只能在声明时分配值,而不能在以后。
这意味着在这个例子中,编写有效代码的唯一方法是在变量真正初始化的时候写出声明。不要更早地写。
这两个例子都说明了为什么在 C++ 中允许在其他可执行语句之后声明变量,而不像在 C 中一样在块的开头声明。
这解释了为什么这被添加到 C++ 而不是 C(和其他语言)中,因为它并不是真正需要的。