小编Cha*_*had的帖子

如何制作一个简单的C++程序,其中没有刷新std :: cout

为了更好地理解C++中的缓冲流,我想编写一个简单的程序,std::cout在终止之前不刷新缓冲区.由于我已经读取了std::cout在正常终止时刷新,我尝试抛出运行时错误.我也避免使用std::endl,据我所知,强制冲洗.第一次尝试:

//file noflush.cpp
#include <iostream>

int main() {
    std::cout << "Don't write me to the console!";
    throw 0;
}
Run Code Online (Sandbox Code Playgroud)

用g ++编译,从终端调用:

$ ./noflush
libc++abi.dylib: terminating with uncaught exception of type int
Don't write me to the console!Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

即使我强制运行时出错,看起来缓冲区在终止时仍然会被刷新.是否有可能在缓冲区中"绑定"某些数据,使其不被写入设备?

c++ buffer cout stdout stream

13
推荐指数
2
解决办法
1506
查看次数

列表初始化的char数组是否仍为空终止?

当我通过Lippman C++ Primer(第5版,C++ 11)时,我遇到了这段代码:

char ca[] = {'C', '+', '+'};  //not null terminated
cout << strlen(ca) << endl;  //disaster: ca isn't null terminated
Run Code Online (Sandbox Code Playgroud)

在ca上调用库strlen函数(不是以null结尾)会导致未定义的行为.Lippman等人说"这次调用的最可能的影响是,strlen将继续查看跟随ca的内存,直到遇到空字符."

稍后的练习将询问以下代码的作用:

const char ca[] = {'h','e','l','l','o'};
const char *cp = ca;
while (*cp) {
   cout << *cp << endl;
   ++cp;
}
Run Code Online (Sandbox Code Playgroud)

我的分析:ca是一个非空终止的char数组.cp,一个指向char的指针,最初保存ca [0]的地址.while循环解除引用指针cp的条件,将生成的char值上下文转换为bool,并仅在转换结果为"true"时执行循环块.由于任何非null char都转换为bool值'true',循环块执行,将指针递增char的大小.然后循环遍历内存,打印每个char,直到到达空字符.因为ca不是以空值终止的,所以循环可以继续远远超过ca [4]的地址,将后来的内存地址的内容解释为字符并将它们的值写入cout,直到碰巧遇到发生的一大块位表示空字符(全0).这种行为类似于Lippman等人在前面的例子中提出的strlen(ca).

但是,当我实际执行代码(再次使用g ++ -std = c ++ 11进行编译)时,程序会一直打印:

'h'
'e'
'l'
'l'
'o'
Run Code Online (Sandbox Code Playgroud)

并终止.为什么?

c++ pointers char

6
推荐指数
1
解决办法
497
查看次数

为什么Boost :: multiprecision :: sqrt(1)返回0?

Boost :: multiprecision :: sqrt(1)似乎返回0

#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/number.hpp>
#include <iostream>

using std::cout;
using std::endl;

int main() {
   namespace mp = boost::multiprecision;
   mp::cpp_int i(1); 
   cout << "i == " << i << endl;
   cout << "mp::sqrt(i) == " << mp::sqrt(i) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:
i == 1
mp :: sqrt(i)== 0

我希望sqrt(1)== 1.

我在coliru和我的本地安装上使用gcc和Boost 1.62 获得了相同的结果.这会发生在其他人身上吗?我错过了什么或这是一个错误吗?

c++ boost boost-multiprecision

6
推荐指数
1
解决办法
181
查看次数

"pch"代表什么?

这行R代码

plot(1:3,4:6,pch=7:9)
Run Code Online (Sandbox Code Playgroud)

生成一个用不同符号绘制三个点的图.什么pch代表什么?

r

4
推荐指数
1
解决办法
1480
查看次数

标签 统计

c++ ×3

boost ×1

boost-multiprecision ×1

buffer ×1

char ×1

cout ×1

pointers ×1

r ×1

stdout ×1

stream ×1