65,186
社区成员




class C{
public:
C(const C& c):name(c.name){}// 这里本对象的name只读访问了c的name
C(C&& c):name(std::move(c)){}// 这里甚至把c的name直接挪过来,操作之后this的name成了
// 原来的c.name, 而c.name则变成了空串
// 这个是C++为了追赶C的效率在C++11中新引入的能力
// 旧一点的编译器还不支持。如果你的编译器抱怨这个代码有问题
// 那是因为它还生活在前C++11时期。
private:
std::string name;
};
这种访问同意类的其他对象的私有成员的能力不光是C++允许的,而且是唯一合乎逻辑的。这个不能类比于人类这个类的对象,比如你的私有财产,那另一个对象,比如我,就不可以随便访问。这是两码事。[/quote]
不过很多编译器都报错了[/quote]
impossible? what error?[/quote]
完全可以!不然如何复制/移动构造? 如何assignment?
比如C++的一个典型的用法
class C{
public:
C(const C& c):name(c.name){}// 这里本对象的name只读访问了c的name
C(C&& c):name(std::move(c)){}// 这里甚至把c的name直接挪过来,操作之后this的name成了
// 原来的c.name, 而c.name则变成了空串
// 这个是C++为了追赶C的效率在C++11中新引入的能力
// 旧一点的编译器还不支持。如果你的编译器抱怨这个代码有问题
// 那是因为它还生活在前C++11时期。
private:
std::string name;
};
这种访问同意类的其他对象的私有成员的能力不光是C++允许的,而且是唯一合乎逻辑的。这个不能类比于人类这个类的对象,比如你的私有财产,那另一个对象,比如我,就不可以随便访问。这是两码事。[/quote]
不过很多编译器都报错了[/quote]
impossible? what error?[/quote]
提示在xxx成员函数中xxx是私有对象,你可以自己去试试
class C{
public:
C(const C& c):name(c.name){}// 这里本对象的name只读访问了c的name
C(C&& c):name(std::move(c)){}// 这里甚至把c的name直接挪过来,操作之后this的name成了
// 原来的c.name, 而c.name则变成了空串
// 这个是C++为了追赶C的效率在C++11中新引入的能力
// 旧一点的编译器还不支持。如果你的编译器抱怨这个代码有问题
// 那是因为它还生活在前C++11时期。
private:
std::string name;
};
这种访问同意类的其他对象的私有成员的能力不光是C++允许的,而且是唯一合乎逻辑的。这个不能类比于人类这个类的对象,比如你的私有财产,那另一个对象,比如我,就不可以随便访问。这是两码事。[/quote]
不过很多编译器都报错了[/quote]
impossible? what error?
class C{
public:
C(const C& c):name(c.name){}// 这里本对象的name只读访问了c的name
C(C&& c):name(std::move(c)){}// 这里甚至把c的name直接挪过来,操作之后this的name成了
// 原来的c.name, 而c.name则变成了空串
// 这个是C++为了追赶C的效率在C++11中新引入的能力
// 旧一点的编译器还不支持。如果你的编译器抱怨这个代码有问题
// 那是因为它还生活在前C++11时期。
private:
std::string name;
};
这种访问同意类的其他对象的私有成员的能力不光是C++允许的,而且是唯一合乎逻辑的。这个不能类比于人类这个类的对象,比如你的私有财产,那另一个对象,比如我,就不可以随便访问。这是两码事。[/quote]
不过很多编译器都报错了
class C{
public:
C(const C& c):name(c.name){}// 这里本对象的name只读访问了c的name
C(C&& c):name(std::move(c)){}// 这里甚至把c的name直接挪过来,操作之后this的name成了
// 原来的c.name, 而c.name则变成了空串
// 这个是C++为了追赶C的效率在C++11中新引入的能力
// 旧一点的编译器还不支持。如果你的编译器抱怨这个代码有问题
// 那是因为它还生活在前C++11时期。
private:
std::string name;
};
这种访问同意类的其他对象的私有成员的能力不光是C++允许的,而且是唯一合乎逻辑的。这个不能类比于人类这个类的对象,比如你的私有财产,那另一个对象,比如我,就不可以随便访问。这是两码事。