2013-10-01 53 views
2

这可能很容易,我可能只是想念在我面前的东西。然而,我不知道如何确保一个函数参数,通过引用传递,可以修改。从本质上讲,我需要如下:如何检查函数参数是否恒定?

bool calculate(double lat, double lon, double dep, 
       double &x, double &y, double &z) 
{ 
    if (x, y, AND z are NOT const) 
    { 
     perform the proper calculations 
     assign x, y, and z their new values 
     return true; 
    } 
    else //x, y, or z are const 
    { 
     return false; 
    } 
} 

“如果” statment检查确实是我所需要的

我再次道歉,如果这是已经在这个网站,或者如果它是一个标准库函数我缺少的是就在我的面前。我一直来这里,几乎总是得到一个很好的答案,但是我在这里已经找不到任何东西了。

+2

如果参数列表中没有声明变量,则变量将不是const。 – 0x499602D2

+5

您不能将'const double'传递给需要'double&'的函数。你不需要检查。 – jrok

+0

您可能需要重新设计该函数以获取三个值,并返回类似于矢量的东西。从长远来看,推理起来会容易得多。 –

回答

8

如果你有double &x那么它不是一个常数。如果你有const double &x那么它是一个常数。

就你而言 - 无需检查,它们不是常量。该检查在编译时间自动执行。

看到这个:

void func(double &x){ X=3.14; } 

double d; 
const double c_d; 
func(d); // this is OK 
func(1.54); // this will give an ERROR in compilation 
func(c_d); // this will also give an ERROR in compilation 

你根本无法调用要与一个常数(非const)引用的函数。

这意味着编译器会为您找到一些错误 - 就像您的情况一样,您不必返回truefalse,而且您不需要检查它以尝试找到错误 - 只需编译并编译器会为你找到这些错误。

+1

当然,有人可以使用'const_cast'来说谎这个函数 - 但是没有办法检测到它,所以他们只能忍受后果。 –

+1

@MikeSeymour - true。顺便说一句 - 你甚至可以在1.54这样的数字上做一个'const_cast'吗? – rabensky

+0

不,您只能将*左值*(如变量)转换为*左值*参考。像'1.54'这样的文字是* rvalue *,所以它不起作用。 –

相关问题