【发布时间】:2009-03-19 07:00:22
【问题描述】:
这里发生了什么:
double foo( const double& x ) {
// do stuff with x
}
foo( 5.0 );
- 编译器是否创建匿名变量并将其值设置为 5.0?
- x 是否引用了只读内存中的内存位置?这是一个奇怪的措辞,我知道...
编辑:我忘记了 const 关键字...
【问题讨论】:
标签: c++
这里发生了什么:
double foo( const double& x ) {
// do stuff with x
}
foo( 5.0 );
编辑:我忘记了 const 关键字...
【问题讨论】:
标签: c++
为此目的创建了一个临时变量,它通常在堆栈上创建。
您可以尝试 const_cast,但无论如何它都没有 pontless,因为一旦函数返回,您将无法再访问变量。
【讨论】:
非常量引用不能指向文字。
$ 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 ofdouble foo(double&)'
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 引用,如下所示。 test2.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;
}
【讨论】: