Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的哪个选项+;?_C++ - Fatal编程技术网

C++ C+中的哪个选项+;?

C++ C+中的哪个选项+;?,c++,C++,编程的一个特点是有几种方法可以实现相同的目标。在我的C++时间编码中,我注意到了在实现某些共同特征方面的以下变化。我的问题是每种方法的优点/缺点是什么,我基本上了解每种方法的工作原理,但我想知道哪种方法在性能、可读性、符合标准以及OOP的可接受性方面更好 cout vs printf cin vs scanf endl vs\n 谢谢< p>如果你的主要编程语言是C++,你在做面向对象编程,那么它将是CUT、CIN和EnDL—下手: 这不是性能的问题,而是风格和连贯编码的问题 除此之外,您还可以

编程的一个特点是有几种方法可以实现相同的目标。在我的C++时间编码中,我注意到了在实现某些共同特征方面的以下变化。我的问题是每种方法的优点/缺点是什么,我基本上了解每种方法的工作原理,但我想知道哪种方法在性能、可读性、符合标准以及OOP的可接受性方面更好

cout vs printf

cin vs scanf

endl vs\n


谢谢

< p>如果你的主要编程语言是C++,你在做面向对象编程,那么它将是CUT、CIN和EnDL—下手: 这不是性能的问题,而是风格和连贯编码的问题


除此之外,您还可以使用cout、cin处理用户定义的类型,这在printf scanf中是不可能的。

您会发现许多商业代码都是混合的。虽然这不是好的风格,但如果最后编辑代码的人最初是在C或C++上训练的话,那么它通常会归结为。如果你坚持C++风格的操作,你就可以在很大程度上得到你的BUK,从长期来看,操作符重载和多态性以及代码中的错误更少。p>

无论如何,您将最可能链接到使用更多C样式语义的外部库,因此在任何大型C++项目中,可以看到C++编程和更实用的C样式的混合。

< P>如果您在调试程序中调试到CUT、CIN、Entl等调用,您会发现,与标准C库相比,这些确实是方便的OO包装。当然,在大多数情况下,它们的性能充其量只能与C库中的同类产品相差无几。但是正如其他的一些反应指出的,C++中的这些对象/技术有其自己的风格,在大多数情况下远远超过性能。

作为一个例子,考虑由于“Prtff”的不适当/粗心而引入的安全漏洞的数量。


大多数C++程序员还可以使用CUT、CIN、Entl等代替C语言,如PROTF、SCANF等。因此,如果C++程序员看到他喜欢看到的东西,那么可读性肯定会提高。但这实际上取决于你所在的球队。如果主要是C++开发者迁移到C++,那么会有一个初始的阶段来适应C++风格。虽然C的IO功能要求程序员密切关注他们正在做的事情,以便始终将格式化字符串与传递的实际参数相匹配,否则代码将调用未定义的行为。无论您使用何种类型的C++“IO,它都会自动执行正确的操作。
除了极少数几个IO性能真正重要的地方之外,我真的不认为使用C的IO有什么意义。(而且,不,我不认为熟悉

printf()
格式化字符串是选择不安全特性而不是安全特性的好理由。)


至于
'\n'
vs.
std::endl
:后者是
的一个方便的包装,这个问题对于
'\n'
vs.
std::endl
来说并不那么容易。后者做两件事:将
'\n'
插入流并刷新它(就像插入
std::flush
)。在大多数情况下,您只需要
'\n'
。我看到一个应用程序(编写文件)通过用
'\n'
替换不必要的
std::endl
从爬行变为飞行。关于std::end还有另一个问题:可移植性!std::endl将“\r\n”写入windows平台的文本文件,对于unix平台只写入“\n”。@Antonio Perez:“\n”在windows上也会写入“\r\n”,如果流是以文本(而不是二进制)形式打开的话。@dalle:谢谢你指出,我忘了windows的奇怪行为:)无论如何,我发现使用“STD:Endl”更为干净,因为当代码“OS@ Antonio Perez——不是Windows怪异行为”时,它更难记住Windows行为,它是由C和C++标准定义的。例如,Mac OS 9’\n’(10)应该变成‘\r’(13)。如果你已经意识到了它们的能力和局限性。“,那你为什么要问使用哪一个呢?那句话是指功能性,我是在寻求关于我指定标准的答复。
+1
来自我,尽管中间一段的结尾应该是感叹号而不是问号
:)
我发现printf()的格式字符串比cout
printf
等的几行更可读。与iostreams相比,printf有一个很大的优势:格式的声明性描述,而不是iostreams对每个细节的刻苦命令式描述,以及printf(适度但仍然)将表示与逻辑分离的能力。iostream formatter还具有状态完整性(引入使用相同流的所有代码的隐式相互依赖性,或强制到处保存/恢复状态)。幸运的是,我们有boost::format。@Jeremy,@atzz:我可以理解你关于格式字符串的描述性的观点,尽管我在学习
printf()
之前已经了解了流,可以向你保证后者并不比前者容易;他们只是更为许多开发人员所熟知和熟悉。然而,我坚持我的观点,这并不能成为使用不安全设施的借口,格式字符串是不安全的。然而,正如@atzz所说,还有boost.format,它将格式字符串的表达能力与流的类型安全性结合起来。所以现在连一个软弱的借口都没有了。