草庐IT

c++ - 为什么 const 类成员必须是静态的才能得到适当的优化?

给定:classFoo{constintx=5;public:inlineintget(){returnx;}};classBar{staticconstintx=5;public:inlineintget(){returnx;}};intfn0(Foo&f){returnf.get();}intfn1(Bar&b){returnb.get();}编译后的输出提供内存获取以读取fn0()中x的值,而添加static结果是文字5被内联到fn1()中。这意味着只有当整数常量为静态时,get()的调用方才可以像使用常量代替get()一样进行优化。我有更复杂的情况,其中static不合适。派生

c++ - scanf int8_t 损坏堆栈

如何在没有这个错误的情况下扫描int8_t和其他类型。我使用“cinttypes”来获取模式常量,但这没有帮助。#include#include#includeintmain(){int8_tvar;scanf("%"SCNi8,&var);printf("%"PRIi8"\n",var);return0;}附言此错误仅在Debug中出现,在Release中构建时就可以了。附言输出是:1>------Buildstarted:Project:SCANF_PROBLEM,Configuration:DebugWin32------1>SCANF_PROBLEM.cpp1>d:\study

c++ - 为什么要在函数指针或返回函数指针的函数编译之前放几十个*?

我发现这段处理多个函数指针取消引用的代码意外编译,尽管看起来无效。这怎么能编译?它是编译器中的错误吗?我在Ubuntu14.04上使用gcc4.8.2。intaddInt(intn,intm)//function{returnn+m;}int(*(*functionFactoryPtr)(intn))(int,int);//pointerint(*(functionFactory)(intn))(int,int)//function{std::cout 最佳答案 函数左值可以隐式转换为指向函数的指针([conv.func])。在您的

c++ - MPI - 随着进程数量的增加没有加速

我正在编写程序来测试数字是否为素数。一开始我计算分配给每个进程的数字,然后将这个数量发送给进程。接下来,执行计算并将数据发送回保存结果的进程0。下面的代码有效,但是当我增加进程数时,我的程序不会加速。在我看来,我的程序不能并行运行。怎么了?这是我在MPI的第一个项目,因此欢迎任何建议。我使用mpich2,并在IntelCorei7-950上测试我的程序。主要.cpp:if(rank==0){intworkers=(size-1);readFromFile(path);intelements_per_proc=(N+(workers-1))/workers;intrest=N%eleme

c++ - 使用 typeof 和 decltype 定义数组时出现编译器错误

A)这行得通:intmain(){int*a=newint[5];delete[]a;return0;}B)这个错误:intmain(){int*a=newtypeof(*a)[5];delete[]a;return0;}错误:数组下标的类型'int[int]'无效C)这行得通:intmain(){int*a=newtypeof(a)[5];delete[]a;return0;}我不明白为什么B会失败,因为扩展后语句应该如下所示:int*a=newint[5];因为typeof(*a)是int。下面是decltype的实验:D)这行不通:intmain(){int*a=newdeclt

c++需要将int类型转换为unsigned int

我将此代码作为C++项目的一部分unsignedintfn(){//dosomecomputationsintvalue=....if(value我不需要在最后一个return语句中使用强制转换,因为所有负数都将在if语句中被捕获(因此返回0)。此外,此函数fn是从另一个函数(其返回类型为int)调用的,该函数仅返回fn返回的值。谢谢.. 最佳答案 目的是消除可能发出的编译器警告。 关于c++需要将int类型转换为unsignedint,我们在StackOverflow上找到一个类似的问

c++ - 递增的 int 在函数结束时重置

这是有问题的功能。有问题的变量是count1。在returncount1;之前,该函数似乎将count1重置为1或2。最后cout行的结果是n行,其中n=尝试次数,包括正确的回答。每行输出一个比下一行大1的数字,直到count1=1或2。我无法确定它最终输出的模式。问题本身只是占位符。到底发生了什么事?注意:我是一个非常新的程序员,我知道可能有更有效的方法来做我正在做的事情,但我还没有学到。我愿意接受建议,但我对这些建议的理解可能会因为我对C++的不熟悉而受到阻碍intq1(intcount1)//q1()isalwaysfedavalueof1.{usingnamespacestd;

c++ - 顶级或低级常量或两者都不是?

我正在处理C++Primer如果我理解正确的话:顶级常量适用于对象本身。低级常量意味着被引用对象是常量,这使得被引用对象成为顶级常量。//Aplainint.inti{0};//Top-levelconstints.constintci{42};constintci2{0};//Alow-levelpointertoconstint.constint*pci{&ci};//Low-level,becausethereferencedobjectcan'tbechanged.*pci=0;//error//Butnottop-level,becauseitcanbechangedtopo

c++ 字符串到 boost::multiprecision::cpp_int

如何将字符串转换为“boost::multiprecision::cpp_int”?此外,我有一个.txt文件,其中包含100个数字,每个数字50个数字,我使用ifstream将它们逐行读取到字符串数组中。如何将数组中的每个字符串转换为cpp_int,然后将所有100个数字相加并得出总和? 最佳答案 要转换单个字符串,请使用cpp_int构造函数:cpp_inttmp("123");.对于文本文件的情况,循环读取每个数字作为std::string通过std::getline,然后放回std::vector.然后使用后者来计算您的总和

c++ - 如何创建用捕获的变量包装 lambda 的仿函数?

如何更改下面的仿函数以用作lambda包装器?templateclassF{Tf;public:F(Tt){f=t;}T&operator()(){returnf;}};intmain(){intx=5;Ff([x](inta,intb){returna+b;});return0;}编译器说error:nomatchingfunctionforcallto'F::F(main()::)'Ff([x](inta,intb){returna+b;}); 最佳答案 它更复杂......在内部捕获变量的lambda函数本身不是函数,而是数据