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,为啥?

如何将文件与已初始化的 ifstream 对象关联?

带有尾递归函数c ++的堆栈溢出

ifstream 打开失败时如何获取错误消息

关于js的call()和apply()两个函数的一点个人看法

如何更改指针变量的值并将更改保留在函数之外而无需通过引用传递?