【发布时间】:2012-01-04 21:54:06
【问题描述】:
我想检查一下我对此事的理解和结论。
在 IRC 上,有人问:
const_cast是否可以接受绑定到临时对象的const引用?
翻译:他有一个 ref-to-const 绑定到一个临时的,他想抛弃它的 const-ness 来修改它。
我的回答是我之前曾问过a similar question,其中的共识似乎是临时人员本身并不是const,因此您可以摆脱const-您所拥有的参考给他们,并通过结果修改他们。而且,只要原来的 ref-to-const 仍然存在,就不会影响临时对象的生命周期。
即:
int main()
{
const int& x = int(3);
int& y = const_cast<int&>(x);
y = 4;
cout << x;
}
// Output: 4
// ^ Legal and safe
我说的对吗?
(当然,这样的代码是否真正可取完全是另一回事!)
【问题讨论】:
-
@Mark:哦,文字可能是一个糟糕的选择。我现在已经把它变成了这个问题的非文字。
-
我正要说该代码中没有临时代码。幸运的是,我在做之前刷新了页面:)
-
afaik(但我在 stadnard 中找不到它)它说“当它被声明为 const 时,你可能不会放弃 constness”......所以问题是,是文字声明为常量?我不这么认为,因为它会产生一个临时对象,所以它被声明为 const 吗?我不知道,但我的胆量说:不
-
@MarkB:虽然
2.14.2实际上并没有像2.14.5/12对字符串文字那样禁止或取消定义修改整数文字。好奇!
标签: c++ reference constants const-cast temporary-objects