是否允许将 *this 作为接受引用(&)的函数的参数传递?
is it allowed to pass *this as an argument of a function accepting a reference(&)?
我一直在使用这个方法,没有任何问题,但我想确定这是一个完全允许的方法,还是我只是运气好!
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
感谢
只要void Foo(A&)
被(正向)声明,A::bar
就知道它的存在,它是完全有效的,并且是100%允许的。
票据
-
有什么地方我不能取消引用
this
吗?不是,但是有一些问题你应该知道。如果您想在构造对象的初始化列表中使用
*this
,请记住不允许通过它访问该对象的虚拟或未初始化成员;既不直接也不间接。 -
如果成员函数被声明为
const
,则只允许使用取消引用的this
指针调用具有常量(引用)的函数,请参阅以下示例。
void func (struct Obj&);
void func (struct Obj const&);
struct Obj {
void bar () const {
func (*this);
}
void bar () {
func (*this);
}
};
int
main (int argc, char *argv[])
{
Obj a;
Obj const b;
a.bar (); /* func (Obj &) */
b.bar (); /* func (Obj const&) */
}
是的,这是允许的。请注意,从const方法中,只能将*this
传递给接受const参数的函数:
class B;
void foo(B&);
void bar(B const&);
class B {
void meow() const {
bar(*this); //OK
foo(*this); //ERROR
}
};
是的,这是完全合法的。这就是在某些运算符(如赋值运算符)中编写return *this;
时所做的操作。
这非常好,也是"我想让其他函数或对象了解这个对象"的常见模式。
只需确保引用的保存时间不会超过传入引用的生存期即可。
相关文章:
- 使用引用与指针将数组作为参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 如何将指针变量作为引用参数传递?
- 移动类的成员作为常量引用参数传递
- 通过引用函数传递指针参数是什么意思?
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- 关于模板化函数上传递的右值引用和传递的参数的歧义
- 如何通过引用将参数传递给模板类的成员函数?
- 如何将对向量的引用作为可变参数传递?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用
- 我可以更改将引用参数传递到指针中并使其正常工作的函数的输入(C、C++)吗?
- C++:将引用作为参数传递,但该函数不接受引用作为参数
- 将引用参数传递给程序集函数
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 将std::vector作为输入/输出引用参数传递时丢失了一些数据
- 将引用参数传递给值参数
- 使用引用参数传递引用意外行为