草庐IT

prinf-cout

全部标签

c++ - cout 消息的顺序不符合预期

当我执行它时,我对下面代码的输出感到困惑。代码:intadd(inta,intb){cout输出:insideintaddfunctioninsidefloataddfunction3070我不明白cout消息在控制台中打印的顺序。但我希望上面程序的输出如下所示insidefloataddfunction30insideintaddfunction70有人可以解释一下上述行为吗。 最佳答案 你代码中的这一行:cout将被编译器翻译成:operator由于函数参数的计算顺序不是标准规定的,所以恰好add(20,50)在operator

c++ - 了解 cout.operator<<() 的行为

根据thisquestion的最佳答案,cout相当于cout.operator.根据对thisquestion的回复,以上说法不正确。根据我自己的测试,cout.operator与cout相同当给定一个整数时。当给出一个float时,cout.operator将其强制为整数。当给定字符串文字时,如cout.operator,它输出的似乎是一个内存地址。当给定一个包含std::string的变量时,它会给出编译器错误。谁能给出初级到中级水平的解释是怎么回事? 最佳答案 这取决于expr.这两个问题的答案都是针对特定案例的,而不是一揽

c++ - 如何将 std::ofstream 重定向到 std::cout?

我正在处理一些使用std::ofstream*类型的全局调试记录器的代码。我想将它重定向到std::cout,因为我正在实时使用代码,而不是为它设计的批处理方法。是否可以将它使用的全局std::ofstream*指针重定向到std::cout?我知道std::ofstream继承自std::ios,它允许使用rdbuf()方法更改流缓冲区,但是不幸的是,std::ofstream重新定义了rdbuf()方法,这使得以下代码无法编译:gOsTrace=newstd::ofstream();gOsTrace->rdbuf(std::cout.rdbuf());是否有另一种方法可以将gOsT

C++17 cout中的折叠表达式

我正在学习新的c++17折叠表达式,我从c++17foldexpression看到这段代码.我想知道为什么这段代码有效:templatevoidprinter(Args&&...args){(std::cout但不是这个:templatevoidprinter(Args&&...args){(std::cout这看起来也合乎逻辑,并且在我看来会颠倒打印顺序。 最佳答案 见于cppreference,二元折叠可以有以下两种形式:在哪里E是打包表达式和I是初始化表达式。没有与您的(std::cout匹配的二进制折叠,其形式为(IopEo

c++ - "cout<<(char*)NULL"在这里做 "close(1)"吗?

这个问题在这里已经有了答案:Whydoesstd::coutoutputdisappearcompletelyafterNULLissenttoit(3个答案)关闭8年前。在下面的代码中我使用了cout在这一行之后,我的程序没有在输出屏幕上打印任何内容。这是否意味着我已经完成了close(1)与cout这里?这里到底发生了什么?这是一个错误吗?请分享您的想法。#includeusingnamespacestd;voidf(){cout我在gcc和DevCpp编译器上都试过了,观察到相同的行为。

c++ - 为什么 std::cout 如此耗时?

我编写了一个程序来计算8个字符的字符串“sharjeel”的排列。#include#includecharstring[]="sharjeel";intlen=8;intcount=0;voidswap(char&a,char&b){chart=a;a=b;b=t;}voidpermute(intpos){if(pos==len-1){std::cout如果我打印每个排列,则大约需要9.8秒才能完成执行。40314lshaerej40315lshareej40316lshareje40317lshareej40318lshareje40319lsharjee40320lsharjeeP

cout <<自动的C++格式

如果我有一个包含两个变量x和y的简单类,以及一个返回带有数据的格式化字符串的函数ToString()。当我打电话时cout有人知道我可以自动调用simpleClass.ToString以返回格式正确的字符串的方法吗?我猜想有一种方法可以使用运算符函数来执行此操作,但我不知道该怎么做。 最佳答案 如果你问如何定义这样的运算符,templatestd::basic_ostream&operator&os,SimpleClassconst&sc){returnos 关于cout

c++ - 使用 std::cout 添加时间戳

我有以下代码将我的std::cout输出重定向到日志文件。std::ofstreamout("out.txt");std::streambuf*coutbuf=std::cout.rdbuf();//saveoldbufstd::cout.rdbuf(out.rdbuf());//redirectstd::couttoout.txt!现在我想要的是,每当出现换行符时,当前的时间戳就会被写入文件。我知道我可以通过以下方式实现这一目标:std::cout但我想要的是std::cout以某种方式自动处理它。这可能吗? 最佳答案 我假设,如

c++ - 如果我们将 std::cout 应用于指向成员的指针,我们将收到什么值

我们可以通过应用获取位于内存中的对象的地址表示std::cout我正在尝试对指向成员的指针类型执行相同的操作。#includeusingnamespacestd;structX{boolb;inta;};intX::*a=&X::a;boolX::*b=&X::b;Xx;intmain(){coutDEMO你看我收到了1。1是什么?或者我必须提到一个pointer-to-member只是一种不直接绑定(bind)到“只是”指针的类型吗? 最佳答案 因为operator没有过载直接指向成员的指针,a和b隐式转换为bool,存在过载。该

c++ - 使用 cout 语句执行 while 循环

所以我有一个关于do/while循环的一般性问题。我正在学习C++,我知道您可以编写类似的东西:do{....}while(a关键是,我知道这在C++中是可能的,但我们真的这样做了吗?我的意思是,“cout”里面的东西? 最佳答案 你的while循环等同于do{...cout因为cout返回cout再次。那么问题来了,写这样的语句是什么意思while(cout);或if(cout)...cout对象有一个conversiontoboolean在这里使用。它的实现正在检查!fail(),所以if(cout)...相当于if(!cout