[其它] 虽不合道理,但确能够正常执行的代码

qiezi 2006-11-25
虚方法可就不行啦
moniker 2006-11-25
bigpanda 写道
moniker 写道
教条一下哈。真正的C++顽固分子,上面这句应该写:
int main(void)
{
  static_cast<A*>(0)->foo();
}


C++高手,横空出世,以后热闹了。

晕,老大不带这么玩人的。汗一个。呵呵。
jack 2006-11-25
从未使用过任何*_cast,也没有啥问题出现过.基本上c和c++混用的.
Elminster 2006-11-30
moniker 写道
教条一下哈。真正的C++顽固分子,上面这句应该写:
int main(void)
{
  static_cast<A*>(0)->foo();
}


真正 STD C++ 的狂热顽固分子,不会在 main() 里面写 void ,也不会省去那个 return 0; 的 …………
moniker 2006-11-30
Elminster 写道
moniker 写道
教条一下哈。真正的C++顽固分子,上面这句应该写:
int main(void)
{
  static_cast<A*>(0)->foo();
}


真正 STD C++ 的狂热顽固分子,不会在 main() 里面写 void ,也不会省去那个 return 0; 的 …………


哈哈哈。
ELM:
第一:main(void)这种写法是为了某些在ISO14882(1998)之前的编译器准备的,因为那些编译器如果不写main(void),它会认为必须是int main(int argc,char* argv[])。从而报错。当然,道理上讲,应该写int main()而不是int main(void),basic.start.main2写的非常清楚(14882-1998)

第二。省略这个return 0绝对是C++BIGOT的写法。因为俺当年刚学的时候,老写return 0;
被人耻笑,晕死。这个道理上讲不通,但是你去标准里看,所有的示例都没有return 0;(不用我举例了吧。在ISO14882的示例里,一堆一堆的)。并且我记得,MS的编译器刚出来时,曾经在代码生成时加过这个return 0;结果被好多C++ 社区的嘲笑。

标准本身是允许这样写的,好象高手们都很喜欢卖弄这一点。我觉得这个不是特别好。:P
王者之剑 2006-12-06
编译能通过的时候,我从来不觉得奇怪,
编译不能通过的时候,我常常暗骂一句,然后在修改编译器或修改程序之中选择后者,呵呵。
spinach 2007-03-23
学习了~
小帽子 2007-05-11
哈哈 有趣
#include<iostream.h>
class A   
{   
    int t;
public:   
       
    void foo()   
    {   cin>>t;
        cout<<"foo";   
    };   
};   
  
int main()   
{   
       A *a; 
     a = new A; 
      a=NULL;
    delete (a);   
    a->foo();         
  system("pause");
  return 0;  
} 



学习了点东西~
simohayha 2007-05-11
汗下,俺写main从来不带void地说。
oldrev 2007-05-30
嗯啊,以前一致没注意,moniker高手啊
Global site tag (gtag.js) - Google Analytics