奇怪的关于匿名对象的2个问题,帮忙看下!

ndsc2000 2007-01-10 08:53:26
#include <iostream>
#include <string>
using namespace std;

class Test
{
public:
Test(string* p)
{
cout<<"ok"<<endl;
}
};

int main()
{
string a;
//Test(&a); // 想创建一个匿名对象,为什么编译不过?(vs2005)
Test(&string()); // 这样可以编过,但为什么构造时没有输出"ok"?

return 0;
}
...全文
206 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ndsc2000 2007-01-11
  • 打赏
  • 举报
回复
我知道了,是faux pas, 加上括号就可以了。
weiym 2007-01-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;

class Test
{
public:
Test(string* p)
{
cout<<"ok"<<endl;
}
};

int main()
{
string a;
//Test(&a); // 想创建一个匿名对象,为什么编译不过?(vs2005)
//Test(&string()); // 这样可以编过,但为什么构造时没有输出"ok"?
//这句只是申明,可以看下反汇编,实际上没有内容
Test(&string("")); //这样就可以了
return 0;
}
  • 打赏
  • 举报
回复
class Test
{
public:
Test(string& p)
{
cout<<"ok"<<endl;
}
};

int main()
{
string a;
Test("asasas");
Test(string("ok")); // 这样可以编过,但为什么构造时没有输出"ok"?

return 0;
}
iambic 2007-01-10
  • 打赏
  • 举报
回复
Test(&a) 等价于 Test &a;一个未初试化而且重名的引用。
Test(&string()) 没看明白,麻烦楼下的解释。
SammyLan 2007-01-10
  • 打赏
  • 举报
回复
Test(&a); => (Test(&a));
todototry 2007-01-10
  • 打赏
  • 举报
回复
mark

64,649

社区成员

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

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