草庐IT

double-brace-initialize

全部标签

c++ - 比较一个 32 位 float 和一个 32 位整数而不转换为 double 值,当任一值可能太大而无法完全适合另一种类型时

我有一个32位floatf我需要转换为32位无符号整数的数字(已知为正数)。它的大小可能太大而不适合。此外,下游计算需要一些净空。我可以计算最大可接受值m作为32位整数。如果f,我如何在受约束的32位机器(ARMM4F)上有效地确定C++11数学上。请注意,这两个值的类型不匹配。以下三种方法各有其问题:static_cast(f):我认为这会触发未定义的行为,如果f不适合32位整数f(m):如果m太大而无法准确转换,转换后的值可能大于m使得后续比较在某些边缘情况下会产生错误的结果static_cast(f)(m):在数学上是正确的,但需要强制转换为double并使用double,出于效

c++ - 预处理器 "invalid integer constant expression"比较 int 和 double

在我的代码中的某处,我有预处理器定义#defineZOOM_FACTOR1我在另一个地方#ifdefZOOM_FACTOR#if(ZOOM_FACTOR==1)#defineFONT_SIZE8#else#defineFONT_SIZE12#endif#else#defineFONT_SIZE8#endif问题是当我将ZOOM_FACTOR值更改为float值时,例如1.5,出现编译错误C1017:无效的整数常量表达式。有谁知道我为什么会收到这个错误,有没有办法在预处理器指令中比较integer和floatingpointnumber? 最佳答案

c++ - 从括号内的 initializer_list 构造时调用了错误的重载

我一直认为当我使用初始化列表C++语法时:something({...});编译器总是很清楚我想调用采用std::initializer_list的重载,但对于MSVC2015似乎不太清楚。我测试了这个简单的代码:#include#includenamespacetesting{templatestructTest{Test(){printf("Test::Test()\n");}explicitTest(size_tcount){printf("Test::Test(int)\n");}Test(std::initializer_listinit){printf("Test::Tes

c++ - 将 double 组转换为仅具有 double 成员的结构数组而不复制数据

我正在使用第三方C++库在Julia中完成一些繁重的工作。在Julia方面,数据存储在Array{Float64,2}类型的对象中(这大致类似于double的二维数组)。我可以使用指向double的指针将它传递给C++。然而,在C++端,数据存储在名为vector3的结构中:typedefstruct_vector3{doublex,y,z;}vector3;我的快速而肮脏的方法是一个五步过程:在C++端动态分配结构数组将输入数据从double*复制到vector3*做繁重的工作将输出数据从vector3*复制到double*删除动态分配的数组复制大量数据是非常低效的。我可以使用一些神

c++ - 求以 10 为底的 double 的指数和尾数

我需要将double类型的数值分解为:指数和尾数。我发现我可以使用math.h中的frexp()函数来做到这一点。但是,此函数假定基数为2。有什么方法可以让我找到以10为底的指数和尾数——这样返回的尾数和指数都是整数类型。#include#includeintmain(){inte;constdoublex=1024;constdoublefraction=frexp(x,&e);std::printf("x=%.2lf=%.2lf*2^%d\n",x,fraction,e);}我的编译器是:gcc(Ubuntu/Linaro4.6.4-6ubuntu2)4.6.4

c++ - G++ 4.5 错误 : No diagnostic for narrowing in initializer list

我尝试了以下代码:intmain(){intx{23.22};}其中包括需要缩小的初始化,但代码编译正常,没有任何错误或警告。另一方面,以下代码给出了错误:intmain(){intx[]{23.22};}我是发现了错误还是什么?PS:我目前使用的是GCC4.5.0 最佳答案 看起来像一个错误。以下直接来自n3092草案:8.5.4List-initialization—Otherwise,iftheinitializerlisthasasingleelement,theobjectisinitializedfromthatelem

c++ - 如果用户使用 Rice 在 Ruby 中重新定义 initialize(),则避免 C++ 代码中的段错误

在为Ruby编写C++扩展时,我一直在努力解决的一个问题是,即使用户做了愚蠢的事情,也要让它真正安全。那时他应该得到异常,但绝不是SegFault。一个具体的问题如下:我的C++类有一个非平凡的构造函数。然后我使用RiceAPI来包装我的C++类。如果用户在他的Ruby代码中重新定义了initialize(),那么Rice创建的initialize()函数就会被覆盖,对象既不会被分配也不会被初始化。一个玩具示例如下:classPerson{public:Person(conststring&name):m_name(name){}conststring&name()const{retu

c++ - constexpr if with initializer 由标准保证吗? 'constexpr(constexpr auto x = f(); x) { }'

我找不到任何关于新C++17if初始化语法的信息和“constexprif”在:http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0128r1.html不过,Clang-HEAD支持该语法...constexprautof(){returntrue;}intmain(){ifconstexpr(constexprautox=f();x){}}在线代码在这里->http://melpon.org/wandbox/permlink/dj3a9ChvjhlNc8nr是constexprif带有标准保证的初始值设定项,如constexpr

c++ - 错误 : has initializer but incomplete type

我遇到了问题:在使用结构时有初始化器但类型不完整:在hpp文件中:classA{private:structvideoDT;};在一个cpp文件中:structA::videoDT{videoDT(intb):a(b){}inta;};voidtest(){structvideoDTtest(1);}那么问题来了:错误:有初始化器但类型不完整提前致谢 最佳答案 我认为问题在于test()无法访问A的私有(private)类型。这为我编译:classA{private:friendvoidtest();structvideoDT;};

c++ - 如何仅使用 math.h 将字符串转换为 double

我正在尝试将字符串转换为double字符串,但由于我正在处理Windowsnative应用程序(如仅链接到ntdll.dll),所以我没有大部分可用的标准库。我可以在math.h中使用基本的FP支持,但基本上就是这样。如何将字符串转换为最接近该字符串中表示的有理数的double? 最佳答案 如果你真的想得到最近的,这个问题就很难了,你需要任意精度的算法来实现这个结果。参见ftp://ftp.ccs.neu.edu/pub/people/will/howtoread.ps例如。 关于c++