g++ 3.2 bug的弥补
在一个c++邮件组中,有一个同志说了一件事,说 g++ 3.2.x(至少到目前的g++ 3.2.3)不支持 sizeof临时对象,我很诧异,虽然我没怎么用过将临时object sizeof,但是至少c++应该是支持的,我做了试验
class test
{
};
cout< < sizeof ( test() );
g++果然报错: 不能 sizeof 一个函数: test().
居然将test()当函数处理了,难道这里有二义性?不可能呀,如果我这么做:
class test
{
public:
test(int i){}
};
int x = 10;
test(x);将产生二义性
如何才能排除这个问题呢?明显是g++的bug.
其实排除很简单,我给他写一个template类就行了,没几行代码:
template < typename t >
struct __sizeof
{
operator t() const { return t(); }
operator int() const { return sizeof(operator t()); }
};
使用的时候只需要: cout< < __sizeof < test >() < < endl;
是不是很简单呢?
不过总体来说,g++是最接近c++标准的编译器之一,有瑕疵是难免的,人为可以绕开bug就行了,呵呵...
darkspy
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器