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