例如,此代码编译(g++ 13.1.0)并给出输出“Sum is 20”:
#include <iostream>
using namespace std;
void add (int x, int y, int sum);
int main(){
int x = 10, y = 10;
const int sum = 0;
add (x, y, sum);
return 0;
}
void add (int x, int y, int sum) {
sum = x + y;
cout << "Sum is " << sum << endl;
}
我预计编译器会抱怨要么尝试将常量值传递给函数内被视为非常量的值,要么未能在
sum
中将 add
声明为常量。我想我理解这里发生的一切 - 我正在创建常量变量的非常量副本。我只是好奇为什么这种行为是被允许的。
在 C++ 中,当我按值传递常量时,为什么常量的副本不必也是常量?
因为在 C++ 中,变量是否为 const 在声明/定义该变量时确定。
特别是,当您编写
int x
时,您明确表示您不希望 x
成为 const。如果您希望 x
成为 const,则声明将包含一个 const,如 const int x
中所示。