- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
class A
{
int x;
public:
A(int i=25) { x=i; }
int& f() const { return x; }
};
int main()
{
A a(15);
cout<<a.f();
return 0;
}
我收到一条错误消息,提示我无法从类型为 const int 的表达式中初始化类型为 int& 的引用?如果我修改函数的 f() header ,例如“int f() const”或“int& f()”,它会起作用。我知道 const 函数不能修改类的成员,但在我的示例中,这并没有发生,而且仍然是我无法理解的错误。
其次,我有这段代码:
class B { /* instructions */ };
class D1: virtual B { /* instructions */ };
class D2: virtual B { /* instructions */ };
class D3: B { /* instructions */ };
class D4: private B { /* instructions */ };
class D5: virtual public B { /* instructions */ };
class M1: D1, public D2, D3, private D4, virtual D5
{ /* instructions */ };
class M2: D1, D2, virtual D3, virtual D4, virtual D5
{ /* instructions */ };
问题是 B 在 M1 和 M2 中被继承了多少次。我认为两者的答案都是 3(首先来自 D1,然后来自 D3,然后来自 D4),但我不确定。我说得对吗?
最佳答案
您正在返回对类(class)成员的引用。但是,由于您的方法是 const,因此不允许返回非 const 引用,因为这将允许最终用户在调用 const 方法后修改您的类状态。
考虑一下:
class A
{
int x;
public:
A(int i=25) { x=i; }
const int& f() const { return x; }
};
int main()
{
A a(15);
int &ref = const_cast<int &>(a.f());
ref = 42;
// a.x == 42
return 0;
}
使用 const_cast
通常不是一个好主意,它在这里演示如果允许从 const 方法返回非 const 引用会发生什么。
由于调用了 const 函数,最终用户可能会更改您类中的属性 x
,这是不应该发生的。
按值返回结果是我要走的路,因为它只是一个整数。
关于c++ - 关于const结合引用和虚继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16991614/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!