修改从函数返回的const

时间:2017-02-15 07:24:43

标签: c++

我想我还没有掌握返回const的东西背后的正确理念。

如果我有一个返回const值的函数,是不是意味着我在返回之后无法更改该值?

为什么编译器允许我将const转换为非const变量?

或者它只适用于const指针?

const int foo(int index) {
    return ++index;
}

int main(){
    int i = foo(1); // why can I do this?
    ++i;

    return 0;
}

1 个答案:

答案 0 :(得分:4)

你做的相当于:

public static int GetInt(this DataRow row, string fieldName) {
    return Convert.ToInt32(row[fieldName]);
}

换句话说,您正在制作一个const对象的副本,并修改所述副本。

请注意,返回myRow.GetInt("Int_Field_Name")值的值为ehm。对于内置类型,它并不重要。对于用户定义的类型,它可以防止修改“临时”对象,但代价是阻止移动语义。从C ++ 11开始,建议不要返回const值。