创建返回对象引用的成员函数的最简单方法

时间:2015-05-08 06:33:00

标签: c++ class

我创建了一个返回对象引用的成员函数。

我可以这样做:

class Foo {
  Foo &ref(){
    return *this;
  }
}

ref通过查找this指针返回对象。

有没有其他方法可以在不使用this的情况下返回对象?

解释原因:

我不想使用this的原因是:指针在堆栈中占用4B,而引用共享相同的内存

1 个答案:

答案 0 :(得分:1)

听起来你不喜欢this 你不想取消引用任何指针。怎么样:

class Foo {
  private:
    int dummy;
  public:
    Foo& ref() {
        return reinterpret_cast<Foo&>(dummy);
    }
};
static_assert(std::is_standard_layout<Foo>::value,
              "Foo must be standard-layout!");

因为Foo是标准布局类而dummy是它的第一个非静态数据成员且没有基类,所以dummy的地址与Foo的地址相同包含return *this;

毋庸置疑,这是一种非常愚蠢的方式来返回对象的引用,我看不出任何可能的理由这样做。不想写+就像想要在不使用<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pack.saltriver" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:name=".autostart"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <activity android:name=".hello"></activity> <service android:enabled="true" android:name=".service" /> </application> </manifest> 的情况下添加两个整数。它完全没有任何意义。