我想知道,如果我用 0 初始化一个对象会发生什么。
例如 :
Class Vehicle
{
}
main()
{
Vehicle v =0; // or
Vehicle v;
v=0;
}
假设这是 C++,这段代码会产生编译错误,至少有四个原因:
与 K&R C 不同,C++ 不支持具有隐式返回值的函数。该main
函数总是返回int
,并且必须显式声明为这样。
关键字不大写,class
语言区分大小写。这可能只是一个错字,但编译器不会在意。
类的声明Vehicle
无效。类声明必须以分号结尾(在右大括号之后}
)。
该类Vehicle
没有定义接受整数(或任何可从 隐式转换int
)的构造函数,因此您不能使用 初始化新Vehicle
对象0
。
除非您在 Vehicle 中有一个带有一个数字参数的构造函数,否则您将收到编译器错误,因为
Vehicle v = 0;
是相同的
Vehicle v(0);
在第二种情况下,您需要定义赋值运算符。
一般来说,我建议在询问之前实际尝试编译。
假设您的语言是 C++(并更正以匹配)
class Vehicle
{
};
int main()
{
Vehicle v = 0; // or
Vehicle v;
v = 0;
}
您将无法将 0 分配给堆栈分配的对象实例,因为Vehicle
s 和int
s之间不存在重载赋值运算v = 0
符Vehicle v = 0;
也许您正在考虑指向 a 的指针Vehicle
?
Vehicle* vp = 0;
这会将内存地址0
(更好地表示为C++11NULL
或nullptr
在 C++11 中)分配给指针变量。