愚弄C++编译器。将int而不是contint传递到函数中

愚弄C++编译器。将int而不是contint传递到函数中,c++,compiler-construction,int,C++,Compiler Construction,Int,如何将int传递给需要常量int的函数 或者有没有办法修改contint值 编辑:我应该在前面提到这一点,我使用的是用于编程pic微控制器的ccs c编译器。fprintf函数将常量stream作为其第一个参数。它将只接受常量int并抛出编译错误,否则流必须是有效范围内的常量 编辑2:流是一个常量字节。函数参数列表中的顶级常量被完全忽略,因此 void foo(const int n); 完全一样 void foo(int n); 你只要传递一个int 唯一的区别在于函数定义,在第一个示例中

如何将int传递给需要常量int的函数

或者有没有办法修改contint值

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

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

函数参数列表中的顶级常量被完全忽略,因此

void foo(const int n);
完全一样

void foo(int n);
你只要传递一个int

唯一的区别在于函数定义,在第一个示例中n是常量,在第二个示例中n是可变的。因此,这个特殊常量可以看作是一个实现细节,应该在函数声明中避免。例如,这里我们不想在函数内部修改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.
}

这不需要愚弄。一个函数如果期望一个const int类型的参数,那么它很乐意接受int类型的参数

以下代码可以正常工作:

void MyFunction(const int value);

int foo = 5;
MyFunction(foo);

因为参数是按值传递的,所以常量实际上是毫无意义的。唯一的效果是确保函数的变量本地副本不被修改。传递给函数的变量永远不会被修改,无论参数是否被视为常量。

不确定愚弄是什么意思。。。它是开箱即用的…即使不是由于拷贝,不修改非常量数据变量仍然可以,所以没有理由不接受它。另一方面,修改常量变量是错误的,如果您在链接中将常量切换到r,编译器会给您一个错误。它不会抱怨常量。它抱怨当它需要一个文件*时,却得到了一个int。再想一想,由于这个编译器进行范围检查,您可能需要提供一个编译时常量。但是,这与常量修饰符无关。@IInspectable在本例中,流是常量字节。如果我通过一个常量,编译器会很高兴。我想ccs c编译器不像我想的那样类似于原生c。