草庐IT

C++标准

全部标签

c++ - C++ 标准库必须支持对 friend 是谁挑剔的类吗?

这个问题最容易用一个例子来说明,所以这里是:像下面这样的代码是否保证有效,并且可以正确编译和运行?(并不是所有的实现都能正确地编译它,但我想知道这是否是一个错误。)#includeclassPicky{friendPicky*std::copy(Pickyconst*,Pickyconst*,Picky*);Picky&operator=(Pickyconst&){return*this;}public:Picky(){}};intmain(){Pickyconsta;Pickyb;std::copy(&a,&a+1,&b);return0;} 最佳答案

c++ - 固定宽度整数类型是否保证是标准内置类型的 typedef?

是来自的类型(例如int16_t、uint_fast64_t、int_least8_t)保证为typedefs表示其中一种内置类型,例如short,unsignedlong等等?或者是否允许实现使用非通常内置类型的类型来实现固定宽度类型? 最佳答案 不,至少对于类型intN_t不是。这些类型保证具有二进制补码表示(根据C997.18.1.1,C++11和C++14引用)。标准整数类型不必是二进制补码。C11相对于C99也有重要的变化(实际上只是bugfix),强调上面的一点:7.20.1.1/3:However,ifanimplem

c++ - 以符合标准的方式使用与数组相同类型的成员重新解释结构

这个问题在这里已经有了答案:Castingdoublearraytoastructofdoubles(6个答案)关闭5年前。在各种3d数学代码库中,我有时会遇到这样的事情:structvec{floatx,y,z;float&operator[](std::size_ti){assert(iAFAIK是非法的,因为允许实现在成员之间虚假地添加填充,即使它们属于同一类型,但实际上没有人会这样做。这可以通过static_assert施加约束来合法化吗?static_assert(sizeof(vec)==sizeof(float)*3);即static_assert未被触发是否意味着ope

c++ - 如何减小C++标准库libstdc++.so文件大小

我的电脑上有不同的C++编译器,每个编译器都有自己的libstdc++.so并且它们的大小不同。-rwxr-xr-x.1rootroot967KMar222017libstdc++.so.6.0.13-rwxr-xr-x.1rootroot6.5MAug12017libstdc++.so.6.0.20-rwxr-xr-x.1rootroot11MAug12017libstdc++.so.6.0.21-rwxr-xr-x.1rootroot12MJan3016:58libstdc++.so.6.0.24我想知道为什么libstdc++.so.6.0.13比其他的小很多,有什么办法可以减少

c++ - 等价于 C 中的 std::aligned_storage<>?

在C语言中,有没有一种方法可以使堆栈上的存储过度对齐(即比从类型系统推断出的对齐更多)?对于动态分配的内存中的变量,如果所有其他方法都失败了,我们总是可以手动对齐,但是对于自动分配的内存中的变量可以做什么呢?我想可以使用char[size+alignment-1]然后总是使用位操作来访问变量,但这似乎比必要的“有点”暗淡(harharhar;)). 最佳答案 在C2011中,有_Alignas和_Alignof关键字,标题这使得它们的使用稍微不那么难看,类型max_align_t(在中)。例如,你可以写double_Alignas(

c++ - Lua协程-setjmp longjmp破坏?

在不久前的blogpost中,ScottVokes使用C函数setjmp和longjmp描述了与lua实现协程相关的技术问题:ThemainlimitationofLuacoroutinesisthat,sincetheyareimplementedwithsetjmp(3)andlongjmp(3),youcannotusethemtocallfromLuaintoCcodethatcallsbackintoLuathatcallsbackintoC,becausethenestedlongjmpwillclobbertheCfunction’sstackframes.(Thisis

c++ - 编译器会优化返回具有固定大小数组的结构的函数吗?

假设我在C/C++中有一个具有固定大小数组成员的struct,例如:#defineSIZE10000structfoo{intvector_i[SIZE];floatvector_f[SIZE];};我想创建一个函数来返回foo的实例,例如:foofunc(intvalue_i,floatvalue_f){inti;foof;for(i=0;i如果我调用该函数使用:fooff=func(1,1.1);编译器会执行某种优化(即TCO)吗?可执行文件是直接填充ff变量,还是先填充func的f,然后复制f的所有值到ff?如何检查是否执行了优化? 最佳答案

c++ - x87浮点控制字的初值是如何定义的?

x87浮点控制字的值可以用_control87检查。当一个新线程启动时,在我的平台上它似乎从父线程继承浮点控制字的值。这是未定义的行为,还是我保证如果我启动一个新线程,并且线程库没有错误,控制字的值与父线程中的值相同?这种行为是在哪个标准中定义的,如何定义的?如果没有在任何标准中定义,它是否在处理器手册或操作系统文档中定义?我正在使用C++语言,在64位Windows7上开发,为32位Windows目标编译,并使用x86兼容处理器执行代码。我需要一个专门针对该平台的答案,但如果所有语言和处理器的行为都相同,那么通用答案会更好。 最佳答案

c++ - 为什么 C++ 标准指定在具有混合符号的二进制运算中将有符号整数转换为无符号?

C和C++标准规定,同阶的有符号整数和无符号整数之间的二元运算,有符号整数被强制转换为无符号整数。由此引起的SO有很多问题......我们称之为奇怪的行为:unsignedtosignedconversion,C++ImplicitConversion(Signed+Unsigned),Awarning-comparisonbetweensignedandunsignedintegerexpressions,%(mod)withmixedsignedness等但是这些都没有给出任何理由说明为什么标准采用这种方式,而不是强制转换为带符号的整数。我确实找到了一位自称为大师的人,他说这是显而

c++ - 检查标准输入是否为空

我搜索了但没有得到这个问题的相关答案,我在linux机器上工作,我想检查标准输入流是否包含任何字符,而不从流中删除字符。 最佳答案 您可能想尝试select()函数,并等待数据进入输入流。描述:select()andpselect()allowaprogramtomonitormultiplefiledescriptors,waitinguntiloneormoreofthefiledescriptorsbecome"ready"forsomeclassofI/Ooperation(e.g.,inputpossible).Afile