gpt4 book ai didi

c++ - 从命名空间返回对象安全吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:45:29 25 4
gpt4 key购买 nike

从命名空间中返回对象是否安全。在下面的代码中,call() 按值返回包对象。但是新创建的对象的范围在命名空间内......所以怀疑它是否是正确的方法。

namespace abc{

class bag{

public:
bag()
{
cout<<"\nconstructor called";
}
~bag()
{
cout<<"\ndestructor called";
}
bag(bag &c)
{
cout<<"\ncopy constructor called";
}
bag call()
{
bag f;
return f;
}
};

我的第二个问题是关于复制构造函数。在 main() 中,我尝试使用以下表达式调用复制构造函数,但编译器抛出错误...我该如何实现这一点

abc::bag b;
abc::bag c=b.call(); // trying to call copy constructor ,but getting compile time error

最佳答案

从属于某个命名空间的类的成员函数返回对象没有任何危险。我看不出您可能指的是什么问题。

至于第二个问题,那是因为表达式:

b.call()

产生一个右值(一个临时对象),你的复制构造函数接受一个左值引用:

bag(bag& c)

由于左值引用不能绑定(bind)到右值,编译器对你大喊大叫。您应该让您的复制构造函数具有规范签名并接受对 const 的左值引用(对 const 的左值引用可以绑定(bind)到右值):

bag(bag const& c)
// ^^^^^

毕竟,您通常不需要/不想修改要为其创建拷贝的对象。

关于c++ - 从命名空间返回对象安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com