一个模板的问题

ZangXT 2009-12-16 06:11:24

#include <iostream>
using namespace std;

class NULL_v
{
public:
template <typename T>
operator T *() const
{
return 0;
}
};

class String
{
public:
String(const char* s)
{
cout << "String(const char* s)" << endl;
}
~String()
{
cout << "~String()" << endl;
}
void test()
{
cout << "test()" << endl;
}
};

int main()
{
cout << "ctor" << endl;
String sss(NULL_v());
NULL_v null;
String ss(null);
ss.test();
cout << "dtor" << endl;
double* pd = NULL_v();
cout << pd << endl;
return 0;
}


String sss(NULL_v());
<<Imperfect C++>>上给出的一个例子
好像没有执行,不知道原因是什么?
谢谢指教。
...全文
131 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZangXT 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 a117653909 的回复:]
啊啊,我在VC6.0下有三个错误。
[/Quote]
vc6对模板支持很差。
虎纠印象 2009-12-16
  • 打赏
  • 举报
回复
啊啊,我在VC6.0下有三个错误。
ZangXT 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zangxt 的回复:]
引用 12 楼 loaden 的回复:
引用 6 楼 zangxt 的回复:
String sss(NULL_v());
这句话没见到效果

你没看我5楼代码的变更?


看了。通过跟汇编我知道NULL_v构造了。
我的问题是String对象没有构造,sorry,没有描述清楚。
谢谢。
[/Quote]
我弄错了
String sss(NULL_v());这句话被忽略了。

飞雪的答案应该是正确的
ZangXT 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loaden 的回复:]
引用 6 楼 zangxt 的回复:
String sss(NULL_v());
这句话没见到效果

你没看我5楼代码的变更?

[/Quote]
看了。通过跟汇编我知道NULL_v构造了。
我的问题是String对象没有构造,sorry,没有描述清楚。
谢谢。
老邓 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zangxt 的回复:]
String sss(NULL_v());
这句话没见到效果
[/Quote]
你没看我5楼代码的变更?
SammyLan 2009-12-16
  • 打赏
  • 举报
回复
有效果的
请改一下如下函数
String(const char* s)
{
cout << "String(const char* s) " <<(void*)s<< endl;
}
baihacker 2009-12-16
  • 打赏
  • 举报
回复
    int a(int(a));
int b(int());
int c(int a);
int (x)(int(a));
int (y)(int());
int (z)(int a);
baihacker 2009-12-16
  • 打赏
  • 举报
回复
#include <iostream>
#include <typeinfo>
using namespace std;

class NULL_v
{
public:
template <typename T>
operator T *() const
{
return 0;
}
};

class String
{
public:
String(const char* s)
{
cout << "String(const char* s)" << endl;
}
~String()
{
cout << "~String()" << endl;
}
void test()
{
cout << "test()" << endl;
}
};
//这样做.
NULL_v make_null()
{
return NULL_v();
}
int main()
{
cout << "ctor" << endl;
String sss(make_null());
NULL_v null;
String ss(null);
ss.test();
sss.test();
cout << "dtor" << endl;
double* pd = NULL_v();
cout << pd << endl;
return 0;
}
baihacker 2009-12-16
  • 打赏
  • 举报
回复
String sss(NULL_v());
sss被认为是一个函数了...
zero_zoro 2009-12-16
  • 打赏
  • 举报
回复

ZangXT 2009-12-16
  • 打赏
  • 举报
回复
String sss(NULL_v());
这句话没见到效果
老邓 2009-12-16
  • 打赏
  • 举报
回复
哪里没输出?
VC10输出:
ctor
d9038
test()
dtor
000D9038
~String()

代码:
#include <iostream>
#include <string>

using namespace std;

class NULL_v
{
public:
template <typename T>
operator T *() const
{
return reinterpret_cast<T*>(888888);
}
};

class String
{
public:
String(const char* s)
{
printf("%x\n", s);
}
~String()
{
cout << "~String()" << endl;
}
void test()
{
cout << "test()" << endl;
}
};

int main()
{
cout << "ctor" << endl;
String sss(NULL_v());
NULL_v null;
String ss(null);
ss.test();
cout << "dtor" << endl;
double* pd = NULL_v();
cout << pd << endl;
return 0;
}
ZangXT 2009-12-16
  • 打赏
  • 举报
回复
编译器是gcc 3.4.6
ZangXT 2009-12-16
  • 打赏
  • 举报
回复
运行结果是:
ctor
String(const char* s)
test()
dtor
0
~String()

语句NULL_v null;
String ss(null);
创建了一个ss对象,可以看到构造函数被调用。

double* pd = NULL_v();
也说明,创建对象然后隐式转换为指针没有问题。


shaojun520 2009-12-16
  • 打赏
  • 举报
回复
11
user0418 2009-12-16
  • 打赏
  • 举报
回复
问题不详细
把运行结果贴出来让大家看看

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧