我知道Java,现在想学习C++。我不明白什么是cout(字符输出流)和cin(字符输入)。这些是全局变量吗?那为什么"Mymessage">>cout;不工作?但是cout有效。 最佳答案 cout是类std::ostream的一个实例,是的,它是一个全局变量。但是operator>>(char*,ostream&os);没有被相关头声明,所以"Mymessage">>cout;会给出类似“找不到带有参数constchar*和std::ostream的运算符>>”之类的错误(并且可能会出现更多错误,因为有时编译器会被这类事情弄糊涂
这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:ShouldIuseprintfinmyC++code?如果我只想在屏幕上打印一个string,我可以使用以下两种方式:printf("abc");std::cout在上述例子中,使用printf是否比std::cout有优势,反之亦然? 最佳答案 虽然cout是正确的C++方式,但我相信有些人和公司(包括Google)继续在C++代码中使用printf因为它更容易使用printf进行格式化输出,而不是使用cout。这是我发现的一个有趣的例子here.比较
每次我执行'coutresult.out")我在“result.out”中得到“\r\n”行结尾。到底有没有办法阻止它这样做,只在每个'cout提前致谢。 最佳答案 这适用于VisualStudio2013:#include#include#includeintmain(intargc,char*argv[]){_setmode(_fileno(stdout),_O_BINARY);std::cout它只会输出[0A],而不是[0D][0A]。 关于c++-如何使cout表现为二进制模式
为什么很多在线评委建议“不要使用%lld说明符在С++中读写64位整数”?首选使用cin、cout流还是%I64d说明符? 最佳答案 我相信答案与%lld表示longlongdecimal有关,不能保证是64位。例如,在某些系统上可能是128位。(虽然如果变量是longlong而不是,比如说,uint64_t,那么我希望%lld是正确的使用-或者它反过来会出错)不幸的是,printf和scanf及其兄弟的设计使得编译器实现和格式必须匹配。显然,cout和cin是安全的,因为编译器会自行选择正确的输出和输入翻译。这也可能与“在线评委”
源代码如下。cout声明cout调用类ostream的以下函数._Myt&__CLR_OR_THIS_CALLoperator我知道写'\\\\'这个表达式很奇怪,但我不明白为什么它不会失败。结果如何解释? 最佳答案 这是一个多字rune字,类型为int。[lex.ccon]/2:Anordinarycharacterliteralthatcontainsmorethanonec-charisamulticharacterliteral.Amulticharacterliteral,oranordinarycharacterlite
下面会报编译错误吗?deletecout;deletecin;答案是:没有。这是标准库中流类的实现中的一个缺陷。它们具有以下到void*的转换函数type,表示所有流对象都可以隐式转换为void*:operatorvoid*()const;这通常非常有用,因为它可以让我们写veryidiomaticloop,比如说,从文件中读取输入时。但同时,它允许用户编写deletestream。正如我所说,您可以删除任何流对象。所以所有这些都是允许的:deletess;//declarestd::stringstreamss;deleteiss;//declarestd::istringstrea
在ANSIC++中,如何将cout流分配给变量名?我想要做的是,如果用户指定了输出文件名,我将输出发送到那里,否则将其发送到屏幕。所以像:ofstreamoutFile;if(outFileRequested)outFile.open("foo.txt",ios::out);elseoutFile=cout;//WillnotcompilebecauseoutFiledoesnothavean//assignmentoperatoroutFile我也尝试将其作为宏函数:#defineOUTPUToutFileRequested?outFile:coutOUTPUT但这也给了我一个编译器
我在c++11中编写了一个简单的程序来测试Thread,但是std::cout并没有像我预期的那样工作。classPrinter{public:voidexec(){mutexm;m.lock();cout部分结果:Hello11376Hello16076Hello16076HelloHello1137616076Hello11376,....我使用互斥锁来锁定线程,所以我不明白为什么两个线程同时执行std::cout。它让我觉得很奇怪。谁能解释发生了什么!?! 最佳答案 线程正在使用不同mutex实例,因为mutex是exec()
我经常在代码中的许多不同位置使用cout进行调试,然后我感到沮丧并手动注释所有这些。有没有办法在运行时抑制cout输出?更重要的是,假设我想抑制所有cout输出,但我仍然想在终端中看到1个特定输出(比如说程序的最终输出)。是否可以使用“其他方式”打印到终端以显示程序输出,然后在抑制cout时仍然看到使用此“其他方式”打印的内容? 最佳答案 当然可以(examplehere):intmain(){std::cout输出:FirstmessageLastmessage这是因为将流置于fail状态会使其静默丢弃任何输出,直到故障位被清除。
大多数IOstreammanipulators是具有以下签名的常规函数:std::ios_base&func(std::ios_base&str);然而,一些操纵器(包括最常用的操纵器-std::endl和std::flush)是以下形式的模板:templatestd::basic_ostream&func(std::basic_ostream&os);那么,std::cout的编译过程是怎样的?假设以下示例失败,则成功:$catmain.cpp#includeintmain(){automyendl=std::endl;std::cout很明显,上下文(在std::cout中)有