类 methd 包含相同的类对象

Class methd contains the same class object

本文关键字:对象 包含相 methd      更新时间:2023-10-16

func1func2合法吗?类 methd 包含相同的类对象。

例:

class Foo
{
public:
    void func1() {
        //...
        Foo foo; // Is it legal?
        //...
    }
    // Is it legal in paramete?
    void func2(Foo object) {
        //...
    }
    // It is legal using reference
    // http://stackoverflow.com/questions/6921185/why-do-objects-of-the-same-class-have-access-to-each-others-private-data
    void func3(Foo& object) {
        //
    }
};

合法吗?

是的

为什么?

class Foo
{
public:
    void func1() {
        //...
        Foo foo; // Is it legal?
        //...
    }
};

成员函数的主体是在考虑整个类定义之后编译的。

因此,整个类可用于方法的实现,包括在当前方法之后声明的方法和成员。

这在 [class.mem] 中有介绍。

在类成员规范中,类在函数体、默认参数、引入继承构造函数的 using 声明、异常规范和非静态数据成员(包括嵌套类中的此类内容(的大括号或等于初始值设定项中被视为完整的。

是的,这在您所有情况下都是合法的。

但是在复制的构造函数中是非法的:

// here should be 'const Foo&'
Foo(const Foo object);
说得

很草率,自由函数和成员函数之间的唯一区别是成员函数将this作为第一个参数传递(你没有明确看到它,但它就在那里(。这并不完全正确,但足以理解没有理由不在 Foo 的成员函数中具有Foo

你不能做的是这样的:

struct Bar {
    Bar x;
};

这不仅是一个非常奇怪的结构("它的一直向下",以防万一你知道这句话(,而且你的编译器会清楚地告诉你它行不通。

是的,在所有这三种情况下都是合法的。

当然它是100%合法的,这是许多运算符需要的参数,许多其他函数使用...

看看这个取自 String 类的例子:

string& operator+= (const string& str);

所以字符串类有一个函数将另一个字符串作为参数......