草庐IT

c++ - __cdecl 导致比 __stdcall 更大的可执行文件?

我发现了这个:Becausethestackiscleanedbythecalledfunction,the__stdcallcallingconventioncreatessmallerexecutablesthan__cdecl,inwhichthecodeforstackcleanupmustbegeneratedforeachfunctioncall.假设我有两个函数:void__cdeclfunc1(intx){//dosomestuffusingx}void__stdcallfunc2(intx,inty){//dosomestuffusingx,y}在main()中:in

c++ - 与常规枚举相比,C++ 枚举结构的大小是否更大?

与常规枚举相比,C++枚举结构(类)的大小是否更大?即,假设它们枚举相同的确切数据,什么会转化为更多字节的指令代码?我正在嵌入式环境中开发,这个问题很重要。我喜欢使用枚举结构允许的类型安全和作用域,但不会以代码膨胀为代价。 最佳答案 没有。语义上的差异由编译器管理,因为它只与类型系统有关。没有理由需要更多存储空间或需要更多说明。您可以使用sizeof轻松检查您的实际类型。但是,我应该注意,C++不保证任何此类类型的布局,只是说共享相同底层类型的两个枚举类型是“布局兼容的”([C++14:7.2/9]).

c++ - 'private'访问修饰符是否给了编译器更大的优化空间?

它是否允许编译器内联它,知道只有同一个类中的函数才能访问它?还是只是为了程序员的方便? 最佳答案 编译器可以(但不是必须)按照您的建议进行优化,但这不是要点。访问修饰符的目的是在编译时捕获某些类(没有双关语)的编程错误。私有(private)函数是这样的函数,如果有人从类外部调用它们,那将是一个错误,您希望尽早了解它。(任何时候你问“编译器是否可以根据可用的信息进行优化”这个问题,答案都是“是的,除非标准中有特定的规则说不允许”(例如volatile的规则,其全部目的是抑制优化)。然而,编译器不一定打扰根据任何给定的信息进行优化。毕

【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题

目录1、题目介绍2、解题思路2.1、暴力破解法2.2、经典NextGreaterNumber问题解法1、题目介绍原题链接:496.下一个更大元素I-力扣(LeetCode)示例1:输入:nums1=[4,1,2],nums2=[1,3,4,2].输出:[-1,3,-1]解释:nums1中每个值的下一个更大元素如下所述:-4,用加粗斜体标识,nums2=[1,3,4,2]。不存在下一个更大元素,所以答案是-1。-1,用加粗斜体标识,nums2=[1,3,4,2]。下一个更大元素是3。-2,用加粗斜体标识,nums2=[1,3,4,2]。不存在下一个更大元素,所以答案是-1。实例2:输入:nums

c++ - 四舍五入到最接近和更大的 float

我想使用C/C++将大双数(>1e6)舍入到最接近但更大的float。我试过这个,但我不确定它是否总是正确的,也许有最快的方法来做到这一点:intmain(){//xisthedoublewewanttorounddoublex=100000000005.0;doubley=log10(x)-7.0;floata=pow(10.0,y);floatb=(float)x;//ctheclosestroundupfloatfloatc=a+b;printf("%.12f%.12f%.12f\n",c,b,x);return0;}谢谢。 最佳答案

c++ - 如何确定更大类型的 decltype 表达式

假设我有这样一个函数:staticconstboost::int32_tSOME_CONST_VALUE=1073741823;templatetargetTypeConvert(sourceTypesource){typedefdecltype(source*SOME_CONST_VALUE)MulType_t;//typedefboost::int64_tMulType_t;MulType_tval=(MulType_t)source*(MulType_t)SOME_CONST_VALUE;returnval/(MulType_t)SOME_CONST_VALUE;}当我这样调用这

c++ - std::set 在运行时选择更少或更大的比较器

我重构了一些代码,发现除了集合的比较器是less之外,有两个地方可以用相同的代码编写。在一个地方和greater在另一个。像这样的东西:doubleMyClass::Function1(doubleval){std::set>s;//Dosomethingwiths}doubleMyClass::Function2(doubleval){std::set>s;//DothesamethingwithsasinFunction1}所以我想到了:doubleMyClass::GeneralFunction(doubleval,boolcondition){if(condition){//S

c++ - 为什么 -O2 或更大的 clang 优化会破坏此代码?

我在网站上查看了类似的问题,但在这里找不到与我的情况相符的任何问题。这是我要运行的代码(需要C++14):#include#include#includeusingnamespacestd;classcountdownTimer{public:usingduration_t=chrono::high_resolution_clock::duration;countdownTimer(duration_tduration):duration{duration},paused{true}{}countdownTimer(constcountdownTimer&)=default;count

c++ - 在 C++ 中将字节序列重复到更大缓冲区的最简单方法

给定(在C++中)char*byte_sequence;size_tbyte_sequence_length;char*buffer;size_tN;假设byte_sequence和byte_sequence_length被初始化为一些任意长度的字节序列(及其长度),并且buffer被初始化为指向N*byte_sequence_length字节,将byte_sequence复制到bufferN次最简单的方法是什么?STL/BOOST中是否已经有类似的功能?例如,如果序列是“abcd”,N是3,那么buffer最终将包含“abcdabcdabcd”。 最佳答案

c++ - 如果有两个 "greatest"索引,我如何找到 vector 中最大值的索引,默认为更大的索引?

我一直在使用std::max_element(vec),但据我所知,如果两个“最大”索引相等,它会返回最小索引。例子:vectorv={1,2,3,4,5,3,3,2,5};std::max_element(v)将引用v[4],但出于我的项目的目的,我需要它引用v[8]代替。执行此操作的最佳方法是什么? 最佳答案 你可以用这个max_element(v.rbegin(),v.rend());引用最大值的最大索引。例如,#include"iostream"#include"vector"#include"algorithm"using