愚弄c ++编译器。将int而不是cont int传递给函数

时间:2013-08-18 09:42:57

标签: c++ compiler-construction int

如何将 int 传递给期望 const int 的函数。

或者有没有办法修改cont int值?

编辑:我之前应该提到过,我正在使用用于编程pic微控制器的ccs c编译器。 fprintf函数将常量流作为其第一个参数。它只接受一个常量int并抛出一个编译错误,否则“Stream必须是有效范围内的常量。”。

编辑2:Stream是一个常量字节。

2 个答案:

答案 0 :(得分:9)

完全忽略函数参数列表中的顶级const,所以

void foo(const int n);

完全相同
void foo(int n);

所以,你只需传递一个int

唯一的区别在于函数定义,其中n在第一个示例中是const,在第二个示例中是可变的。因此,此特定const可视为实现细节,应在函数声明中避免。例如,这里我们不想修改函数内部的n

void foo(int n); // function declaration. No const, it wouldn't matter and might give the wrong impression

void foo(const int n) 
{
  // implementation chooses not to modify n, the caller shouldn't care.
}

答案 1 :(得分:4)

这不需要愚弄。期望类型为const int的参数的函数将很乐意接受int类型的参数。

以下代码可以正常使用:

void MyFunction(const int value);

int foo = 5;
MyFunction(foo);

因为参数是按值传递 ,所以const实际上毫无意义。唯一的作用是确保不修改函数的变量的本地副本。无论参数是否被视为const,传递给函数的变量都将从不被修改。