为什么流仍然转换为C11中的指针?

为什么流仍然转换为C11中的指针?,第1张

概述从文本文件读取行的规范方法是: std::fstream fs("/tmp/myfile.txt");std::string line;while (std::getline(line, fs)) { doThingsWith(line);} (不,it is not while (!fs.eof()) { getline(line, fs); doThingsWith(line); 从文本文件读取行的规范方法是:
std::fstream fs("/tmp/myfile.txt");std::string line;while (std::getline(line,fs)) {   doThingsWith(line);}

(不,it is not while (!fs.eof()) { getline(line,fs); doThingsWith(line); }!)

这个工作beacuse std :: getline通过引用返回流参数,因为:

>在C 03中,流转换为voID *,通过std :: basic_ios中的一个运算符voID *()const,当设置失败错误标志时评估为空指针值;

>见[C 03:27.4.4]& [C 03:27.4.4.3/1]

>在C 11中,流通过std :: basic_ios中的显式运算符bool()const转换为bool,当设置失败错误标志时评估为false

>见[C 11:27.5.5.1]& [C 11:27.5.5.4/1]

在C 03这个机制意味着以下是可能的:

std::cout << std::cout;

它正确地导致一些任意的指针值被输出到标准输出流.

然而,尽管在C11中已经删除了operator *()const,但在C11模式下,这也在GCC 4.7.0中为我编译并运行.

在C 11中怎么可能呢?在工作中还有其他机制,我不知道吗?还是简单的实现“奇怪”?

解决方法 我相信这是不允许的/不能发生在C 11的一致性实施.

当然,问题在于,现在大多数实现都在遵循一致性,但是还没有完成.猜测,对于许多供应商来说,这个特别的更新是一个相当低的优先级.它可以改进错误检查,但是很少(或没有)启用新技术,添加新功能,提高运行时效率等).这样可以让编译器捕获您引用的错误(some_stream< lt; some_other_stream),但是真的会有很大的不同. 如果我负责更新C11标准库,我认为这是一个相当低的优先级.还有其他一些变化可能很容易(如果不是容易)并入,并且可能对大多数程序员产生更大的影响. 要使用您给出的示例之一,如果我负责更新VC标准库以利用11月CTP中添加的编译器功能,我的首要任务可能是将标准容器类型的构造函数添加到接受初始化列表.这些是相当容易的添加(我猜猜一个人可能会在一个星期内添加和测试他们),并在程序员可以做什么相当明显的明显区别.

总结

以上是内存溢出为你收集整理的为什么流仍然转换为C11中的指针?全部内容,希望文章能够帮你解决为什么流仍然转换为C11中的指针?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1254298.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存