在C ++中传递对文字的引用会发生什么?

时间:2009-03-19 07:00:23

标签: c++

这里会发生什么:

double foo( const double& x ) {
   // do stuff with x
}

foo( 5.0 );
  1. 编译器是否创建匿名变量并将其值设置为5.0?
  2. x是否在只读内存中引用内存位置?这是一种奇怪的措辞,我知道......
  3. 编辑:我忘记了const关键字......

2 个答案:

答案 0 :(得分:6)

为此目的创建一个临时变量,它通常在堆栈上创建。

您可以尝试const_cast,但无论如何它都是无用的,因为一旦函数返回,您就无法再访问变量。

答案 1 :(得分:1)

  1. 什么编译器可能会创建const文字,但这不是变量。
  2. 非const引用不能指向文字。

    $ g ++ test.cpp test.cpp:在函数int main()': test.cpp:10: error: invalid initialization of non-const reference of type 'double&' from a temporary of type 'double' test.cpp:5: error: in passing argument 1 of double foo(double&)'

  3. TEST.CPP:

    #include <iostream>
    
    using namespace std;
    
    double foo(double & x) {
        x = 1;
    }
    
    int main () {
        foo(5.0);
    
        cout << "hello, world" << endl;
        return 0;
    }
    

    另一方面,您可以将文字传递给const引用,如下所示。 测试2.cpp:

    #include <iostream>
    
    using namespace std;
    
    double foo(const double & x) {
        cout << x << endl;
    }
    
    int main () {
        foo(5.0);
    
        cout << "hello, world" << endl;
        return 0;
    }