编译器为什么不把c++指针的初始值默认为null
在类里定义指针变量,然后都要跑到构造函数里把定义的指针赋为null,感觉很麻烦,
为什么编译器不给指针提供一个默认值呢?
[解决办法]
嘿嘿!
这个问题...也许不同的编译器有不同的处理方式
[解决办法]
因为“规定”
难道你要问1+1为什么不等于3?
[解决办法]
既然有构造函数,就说明得按构造函数说的构造
如果没有构造函数,就生成构造函数.
[解决办法]
用别人的 就得按别人的思路,除非你有自己的
[解决办法]
[解决办法]
oo
[解决办法]
[解决办法]
我想问一句,为什么要把指针变量赋为NULL呢?
这难得不是程序员理所当然要去做的事情吗?
[解决办法]
就算给你个默认值有什么用?
难道你会不初始化就使用它么?
呵呵
[解决办法]
我觉得LZ的建议,很有建设性
编译器给没初始化的指针赋NULL要好过胡乱给值(虽然好多编译器都没有这样做)
[解决办法]
pointer不是建型数据吧。。
就算是建型数据,初始化一下不是更清析末?
[解决办法]
jf
[解决办法]
[解决办法]
因为要兼容C
[解决办法]
因为要兼容C,就这么简单。
[解决办法]
[解决办法]
C,C++程序员的哲学是,程序员知道自己在做什么,编译器从不过分的干预程序员,所以.....
[解决办法]
大多数情况下指针变量在栈上分配内存,编译器在分配变量的空间时只是简单移动栈的指针,这样在栈上声明多个变量就来得很快速,进行一次栈指针的移动就可以了,而再读写内存意味着效率将会损失,并且初始化的内容很快就会被改变
[解决办法]
[解决办法]
c++ 可不是傻瓜型的语言,它从来不会自作聪明地认为客户需要什么就招呼也不打地帮人做了。
如果你需要傻瓜语言,有很多可供选择,即使是你坚持要 C++ 语法的也有 Java 和 C# 给你用。
[解决办法]
bool变量呢???
[解决办法]
如果默认指向NULL,那么编译器会认为你这个指针是被引用过的(referenced),
那么就算你定义好这个指针后,再也没用用过,编译器也不会给你WARNING
如果不默认指针为NULL,那么如果你不用这个指针,编译器就会找到这个错误,比如
unreferenced local variable
那么你就能知道你定义一个没有用过的指针。
------解决方案--------------------
好像gcc就是初始化为null的。
[code = C/C++]
#include <iostream>
using namespace std;
class TT
{
public:
char* p1;
char* p2;
};
int main(int argc, char* argv[])
{
TT s;
printf("p1=%p, p2 = %p", s.p1, s.p2);
return 0;
}
[/code]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
这个问题听来很自卑阿,外国人搞得东西,它想怎么就怎么,除非那天你去搞个,你还可以让他默认为this呢
[解决办法]
[解决办法]
类中定义的指针,在定义时根本没有实例,怎么初始化。
类外定义的指针,不是全局的,不初始化是为了效率。
[解决办法]
为什么要初始化?这是程序员应该做的!
[解决办法]
[解决办法]
学习
[解决办法]
[解决办法]
[解决办法]
我想这应该和全局变量放在静态存储区 有关系
[解决办法]
赞赏楼主这种求知和问疑精神!
不明白的地方就要搞清楚.不能认为C++的作者就是神!
目前 21楼的回答比较令人满意!(看来没有给NULL是有原因的)
[解决办法]
可以在分配变量空间的同时初始化嘛,一个一个得来。不必空间都分配完,在初始化。
[解决办法]
[解决办法]
[解决办法]
当然, 如果这是偶然现象或者说巧合也是完全可能的。
反正是不能指望编译器的初始化的。
[解决办法]
问这个问题,说明你并不明白程序在计算机里运行的原理。
显然,是基于效率的考虑。
[解决办法]
真是的,这是不是问题的问题!
[解决办法]
[解决办法]
还有一种可能是和测试代码的上下文有关。
或许在main函数的开始部分,栈中原本的值就是0(依赖于实现)。可以用更复杂的代码去测试:是否真得做了0初始化。例如:
- C/C++ code
#include <iostream> using namespace std; class TT { public: char* p1; char* p2; };void func(){ char c; TT s; printf("p1=%p, p2 = %p\n", s.p1, s.p2); s.p1 = &c; s.p2 = s.p1+10;} int main(int argc, char* argv[]) { func(); func(); // 0 too ? return 0; }
[解决办法]
[解决办法]
可能你的环境,栈里面全是0吧。。
[解决办法]
C++的法则是:你不必为自己不使用的东西负出多余的代价。