ifstream 函数“get”如何改变它的字符参数? [复制]
Posted
技术标签:
【中文标题】ifstream 函数“get”如何改变它的字符参数? [复制]【英文标题】:How does the ifstream function "get" alters its character argument? [duplicate] 【发布时间】:2015-03-25 19:00:24 【问题描述】:ifstream 的 get 函数读取下一个字符并将其存储在您传递给函数的参数中。示例程序:
#include <iostream>
#include <fstream>
int main ()
std::ifstream is("input.txt"); // open file
char c;
while (is.get(c)) // loop getting single characters
std::cout << c;
is.close(); // close file
return 0;
这很好用,但我对函数 get 如何更改 c 感到困惑,因为它不是由其指针传递的。前段时间有人告诉我,在函数内修改变量不能在函数外更改其值。这就是指针的全部目的,对 - 操作在函数外部创建的对象。那么这里的c怎么改呢?
我想这里有一些我不明白的明显东西?
【问题讨论】:
在 C++ 中,有参考。这就是如何。如果您通过非const
引用传递参数,则可以对其进行修改。 (本质上,大多数编译器将生成相同的机器代码,就好像对象是按指针传递的一样。)
我投票结束这个问题,因为它缺乏关于所使用语言的基本知识。
至少可以看看get
的签名。
我不知道参考资料。我只学过 C,而且我最近才转到 C++,没有经过任何正规培训。当我看到“&”时,它对我来说意味着内存地址......签名是什么?
@TheParamagneticCroissant 是的,我是菜鸟。我做了我的研究,但有时作为一个菜鸟意味着你不知道你在寻找什么。我去看了函数的文档,因为我看到 & 字符假设我应该传递某种指针,但它只有在我传递变量时才会起作用,我很困惑。现在我知道我必须了解“参考”,答案很明显。我应该使用不同的论坛来问我的菜鸟问题吗?我认为堆栈溢出也适合像我这样的菜鸟,试图礼貌地向有知识的人提问。对不起!
【参考方案1】:
成员函数std::istream::get()
使用引用:
istream& get (char& c);
这意味着函数直接访问作为参数传递的变量。
如果您不熟悉参考资料,here 可以了解更多信息。
【讨论】:
非常感谢您提供的参考链接!这是我不知道的显而易见的事情。【参考方案2】:“那
c
这里怎么改?”
由于来自reference documentation std::ifstream::get()
使用通过引用传递的参数char
变量
basic_istream& get( char_type& ch );
所以它通过使用这个引用来改变它。
【讨论】:
以上是关于ifstream 函数“get”如何改变它的字符参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 C++/CLI 中使用 std::basic_ifstream::get() 时出现 AccessViolationException,为啥?