草庐IT

C++标准

全部标签

c++ - 如何定义将在下一版本的标准库中实现的功能?

我需要将在下一个C++版本(C++17)中添加的功能。我正在使用实现C++11的MSVisualStudio。我预计在几年内我会升级我的编译工具,这样这个功能就可以通过标准库使用。与此同时,我需要手动实现它。如何定义它以便将来轻松迁移?我们以std::clamp为例举个例子。我可以用不同的名称来实现它,例如我的夹子。当我能够使用C++17时,我可以开始使用std::clamp,并可选择将my_clamp全局替换为std::clamp。这看起来很丑陋,但可能不会产生任何惊喜。我可以在我的命名空间my::std中实现它,并执行usingnamespacemy。这样,我今天就可以开始使用名称

c++ - 如何从 Windows 10 中的 UWP 控制台应用程序访问到标准输出的输出?

我在VisualStudio2017中创建了一个测试C++UWP控制台应用程序("app3.exe")打印一个字符串到标准输出。在命令提示符或PowerShell上运行时,我可以看到输出,但看不到其他任何东西。例如,我可以使用app3.exe>a_file.txt编写命令输出,它会创建一个空白文件。我怀疑这与Windows在另一个没有输出到stdout(输出到stdout的函数)有关。我只想能够访问我程序的stdout输出。任何建议表示赞赏。示例代码如下:intmain(){printf("Thisisoutput");std::cout我已经把它修剪到只剩骨头了。不管怎样,我运行的是

c++ - "Reading"POD 预增量结果不会产生未定义的行为。为什么呢?

这是一个愚蠢的问题。:)[编辑:愚蠢与否,这是一个C++特性问题,请参阅UPDATE_2]假设我们有:inta=0;//line1intb=++a;//line2第2行发生的事情是(注意,数字只是标记,并不指定确切的顺序):=[1:writeresultof(3)toresultof(2)]/\[2:take"b"l-value][3:convertresultof(4)toanr-value]|[4:take"a"l-value,"increment"andreturnit](4)中的“写入”在(3)中的“读取”之前“有序”,并且由于两者之间没有序列点,因此不能保证在(3)之前发生副

c++ - GDB - 访问复数的实部和虚部

调试使用(C或C++)的程序时,gdb将复数显示为_M_value=xxx+yyy*I(类型为复双数).调试时,我需要打印该数字乘以一个因数。以下不起作用:printa*8.0我得到Argumenttoarithmeticoperationnotanumberorboolean。此外,我无法访问实部和虚部,因此我可以编写一个gdb宏来执行上述操作。我目前的解决方案是编写一个C函数来处理复杂的值和数组,并从gdb调用该函数。不知何故,这感觉不对。 最佳答案 如果您使用标准的C++复杂模板,那么complex::real()和compl

C++11 <thread> 使用 OpenGL 进行多线程渲染可防止主线程读取标准输入

它似乎与平台相关(在我的笔记本电脑上使用Ubuntu12.04,在我的工作站上不使用另一个Ubuntu12.04)。这是关于我使用两个线程执行的操作的示例代码。#include#include#include#include#includeusingnamespacestd;intmain(){atomic_boolg_run(true);strings;threadt([&](){cout>s;cout这是我的编译参数:g++-std=c++0x-omainmain.cc-lpthread-lglfw我的笔记本电脑运行这个程序,像这样:initinitedrenderrenderqu

【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

文章目录定时器1_定时中断定时器2_定时中断定时器3_定时中断定时器4_定时中断定时器5_定时中断高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041):定时器1_定时中断TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。timer.c#include"timer.h"#include"led.h"//初始化定时器为中断触发voidTIM1_Init(u16arr,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;NVIC_InitTyp

c++ - 为什么我必须在 g++ 中打开优化以进行简单的数组访问?

我在C++(gcc/Linux)中使用double的std::vector编写了一个简单的高斯消除算法。现在我已经看到运行时取决于编译器的优化级别(使用-O3最多快5倍)。我写了一个小测试程序并收到了类似的结果。问题不在于vector的分配,也不在于调整大小等。声明是一个简单的事实:v[i]=x+y/z;(或类似的东西)在没有优化的情况下要慢得多。我认为问题出在索引运算符上。如果没有编译器优化,std::vector比原始double*v慢,但当我打开优化时,性能是相等的,令我惊讶的是,甚至对原始double*v的访问速度更快。对这种行为有解释吗?我真的不是专业的开发人员,但我认为编译

c++ - 使用关系运算符比较指针是什么意思?

如果我有两个指针变量a和b,使用语句“a 最佳答案 在C和C++中,如果您有两个指向同一个数组的指针并希望查看它们的相对顺序,则允许使用关系运算符比较指针(这个规则有一个异常(exception),我稍后会提到).例如,假设p和q数组中间某处的每个点arr,如下所示:intarr[9];int*p=&arr[1];int*q=&arr[4];+-----+-----+-----+-----+-----+-----+-----+-----+-----+arr||||||||||+-----+-----+-----+-----+----

c++ - 标准输入按键的 asio 服务处理程序

我已经改编了step3oftheBoostasiotutorial永远运行,并每秒显示一次“tick”和“tock”而不是计数器:#include#include#include#includevoidprint(constboost::system::error_code&/*e*/,boost::asio::deadline_timer*t,int*count){if(!((*count)%2))std::coutexpires_at(t->expires_at()+boost::posix_time::seconds(1));t->async_wait(boost::bind(p

c++ - 标准函数的函数指针和成员函数指针的规则是什么?

将函数指针或成员函数指针指向标准函数的现有规则是什么?例如,类似autop=&std::string::size;这合法吗?如果我明确请求正确的类型,它会或多或少是合法的,所以即使有一个额外的实现添加的std::string::size重载,它也会起作用吗? 最佳答案 使用“正确的”类型并不能使事情变得更好:除了virtual函数外,标准C++库中的所有函数都可以有额外的参数,只要它们是默认的。由于函数也可以用额外的重载声明(同样virtual函数除外),您最终可能会尝试为重载集分配一个变量。因此,代码不可移植,并且无法通过使用某种