提问人:Francis Cagney 提问时间:12/12/2021 最后编辑:Remy LebeauFrancis Cagney 更新时间:12/12/2021 访问量:85
这是在 C++ [已关闭] 中通过引用传递参数的缺陷吗?
Is this a flaw in passing arguments by reference in C++ [closed]
问:
我一直认为这是整个引用概念中的一个缺陷:
请考虑下面的代码片段。我可以看到,当我打电话时,可能会改变。因为我正在传递指向它的指针。mod_pointer(&myint)
myint
但是当我打电话时,不太清楚是否可以修改。事实上,C 程序员会认为完全可以避免修改,因为它似乎是按值传递的。mod_ref(myint)
myint
myint
您必须查找 的定义,在非平凡的程序中,该定义将位于单独的包含文件和模块中。mod_ref
事实上,我认为这个缺点超过了通过引用而不是指针传递的所有优点(没有)。
我错过了什么吗?
#include <iostream>
void mod_pointer(int *p) {
*p = 100;
}
void mod_ref(int &p) {
p = 1000;
}
int main() {
int myint = 10;
mod_pointer(&myint);
std::cout << "hello " << myint << std::endl;
mod_ref(myint);
std::cout << "hello " << myint << std::endl;
return 0;
}
答:
1赞
user8143588
12/12/2021
#1
这是真的。
但是,使用引用会强制传递左值。
例如,您不能通过
mod_ref( *nullptr );
评论
0赞
Sneftel
12/12/2021
该代码段需要编译,因为没有 ;它与左值无关。 会编译得很好。nullptr_t
operator*
mod_ref( *(int*)nullptr )
0赞
12/12/2021
是的,但这需要积极的理性决策。我可以到处传递它,但这太荒谬了。reinterpret_cast<double*>(&myint)
评论
mod_ref
myint
void do_thing(&foo);
foo
void do_thing(const Foo*);