【发布时间】:2016-01-07 03:18:20
【问题描述】:
是否有可能使const& 真正不可变?
int* side_effect;
void function(int const& i){
*side_effect = 123;
}
int main(){
int i = 0;
side_effect = &i;
//based on the function signature, i is suspected not to change.
//however, that is not the case.
function(i);
}
是否有任何编译器警告、属性、编译器扩展或语言功能可以用来避免此类问题?
【问题讨论】:
-
我们不是最近才有这个问题吗? Here.
-
const &并不意味着“无法更改”。它的意思是“不能通过这个参数来改变”。 -
创建一个本地副本,而不是引用其他东西!
-
(M)任何功能都可以被故意破坏。不应像在您的示例中那样使用全局指针。但是,您可以尝试在分配之前进行检查,例如
if(side_effect != &i)。 -
声明
const int i = 0;,当您将其地址分配给非常量指针时,编译器肯定会警告您。对您的问题的任何其他可能解释都会导致广泛且有些毫无意义(尽管有指示)的运行时检查。
标签: c++ reference immutability side-effects c++17