小编4pi*_*ie0的帖子

构造函数与析构函数环境汇编

构造函数从下到上(成员优先)为类的成员函数组装执行环境.析构函数从顶部向下拆卸它(成员最后).

[来自C++编程语言]

请有人形容这个吗?我理解成员函数在这里意味着类的成员函数,但是"成员"首先是什么?这与堆栈上的功能有关吗?什么意思"组装执行环境"?

c++ constructor destructor

2
推荐指数
1
解决办法
240
查看次数

BOOST_MESSAGE未定义

我已经通过svn结账然后在Windows上安装了boost_1_54

bootstrap
.\b2
Run Code Online (Sandbox Code Playgroud)

除了一个项目之外,依赖于boost的QuantLib库编译得很好:使用BOOST_MESSAGE的测试套件.这是未定义的.我可以看到我的boost版本中没有BOOST_MESSAGE.因此,这个QuantLib不兼容还是我错过了什么?在我的linux boost版本中同样适用于BOOST_MESSAGE - 它是未定义的

我已经看过了,但我不知道如何解释这一点.

c++ boost quantlib

2
推荐指数
1
解决办法
2457
查看次数

如何在堆栈上分配指针指针以及如何在堆上?

这是在堆栈和堆上分配指针指针的正确方法吗?如果没有,那么这样做的正确方法是什么?

int a=7;
int* mrPointer=&a;
*mrPointer;

int** iptr; // iptr is on stack
*iptr=mrPointer; //not OK
int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;
Run Code Online (Sandbox Code Playgroud)

感谢Mat的回答,我知道这是将它放在堆栈上的正确方法:

int** iptr; // iptr is on stack
iptr=&mrPointer;
Run Code Online (Sandbox Code Playgroud)

这在堆上:

int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;
Run Code Online (Sandbox Code Playgroud)

c++ heap stack pointers

2
推荐指数
1
解决办法
1525
查看次数

在一个范围内随机,是否为新的rand()版本存在数字偏差?

从各种其他SO问题中读取,当使用rand()%N时,您可能会修改您获得的伪数的偏差,因此您通常必须引入一些范围处理.

但是在所有情况下总是提到rand(),而不是较新的random()或arcrandom4()函数或本机C++ 11方法.当你在一组上运行这些例程时会发生什么?你有像rand()那样的偏见吗?

谢谢.

c++ random math distribution modulo

2
推荐指数
1
解决办法
739
查看次数

反转c中的字节顺序

我在 cs:app datalab 中解决“reverseBytes”时遇到问题。

我必须编写返回相反字节顺序的代码。

示例:输入=0x123456,返回=0x563412

当我使用我的代码时,它不能得分..

int reverseBytes(int x) {
  int mask=0xff;
  int byte1=x>>24;
  int byte2=(x>>16)&mask;
  int byte3=(x>>8)&mask;
  int byte4=x&mask;
  int result=(byte4<<24)|(byte3<<16)|(byte2<<8)|(byte1);

  return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用其他人的代码时,它需要得分。

int reverseBytes(int x) {
  int t2=~(0xff<<24);
  int s1=(0xff<<16)+0xff;
  int s2=0xff<<8;
  int s3=(s2<<16)+s2;
  int temp=(x&s1)<<8|((x&s3)>>8&t2);
  int q1=(0xff<<8)+0xff;
  int q2=q1<<16;
  int temp2=(temp&q1)<<16|((temp&q2)>>16&(~q2));

  return temp2;
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我的代码不能工作..我测试了我的代码和其他人的代码。但我找不到我的代码的结果和另一个代码的结果之间的差异。请帮我..

c memory byte bit-manipulation

2
推荐指数
1
解决办法
2万
查看次数

使用LAPACK dgesvd_在非方矩阵上进行SVD

我必须在非方阵上计算SVD.我正在使用LAPACK的dgesvd_例程.我对方形矩阵没有任何问题,与MATLAB相比,我得到了预期的值.但我无法为4x5矩阵产生预期的结果.我知道解决方案应该与MATLAB的解决方案匹配,因为返回的奇异值按降序排序.我可以看到,在SVD的原始A输入数组中可以找到一些奇异值.这表明我必须调用dgesvd_错误或我错误地引用结果,这可能与前导数组维度有关.

在每种情况下,我首先发出一个LWORK = -1的调用,查询LAPACK以获得最佳值,然后输入下一个计算SVD的调用.我不确定返回值的所有含义以及它们是否有效,是否应该更改等等.我认为它们没问题,所以我在后续调用中使用它们来计算SVD.

所以这段代码按预期工作(3x3矩阵):

 41 /* Reference data. */
 42 double ref_array_A[3][3] = {
 43     { 1, 2, 3},
 44     { 2, 4, 5 },
 45     { 3, 5, 6 }
 46 };
 47 
 48 double ref_array_U[3][3] = {
 49     { -0.327985, -0.736976, -0.591009 },
 50     { -0.591009, -0.327985, 0.736976 },
 51     { -0.736976, 0.591009, -0.327985 }
 52 };
 53 
 54 double ref_array_Sigma[3][1] = {
 55     { 11.344814 },
 56     { 0.515729 },
 57     { 0.170915 }
 58 }; …
Run Code Online (Sandbox Code Playgroud)

math matlab linear-algebra svd lapack

2
推荐指数
1
解决办法
164
查看次数

它是什么:int(*z())[5];

int (*z())[5];
Run Code Online (Sandbox Code Playgroud)

这是什么?如果我把它放在main之前作为全局声明它编译.我认为z()将是一个指针("z()")所以尝试:

int itab[5]={0,1,2,3,4};
((z())[0])[0]=itab;
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

错误:从'int*'到'int'的无效转换

所以我想啊哈,所以我很接近并尝试:((z())[0])[0]=*itab; 编译但链接器未解决的符号错误:

g ++ -o dist/Debug/GNU-Linux-x86/cppappl_example4 build/Debug/GNU-Linux-x86/main.o build/Debug/GNU-Linux-x86/main.o:in function main': /NetBeansProjects/cppappl_example4/main.cpp:242: undefined reference toz()'

所以我的问题是:这个声明是否正确?如果是,那么它是什么,如何使用它?


编辑:答案中给出的链接确实有很大的帮助:

大卫安德森的螺旋规则

和cdecl.org

谢谢!

c++ arrays pointers function-pointers

1
推荐指数
1
解决办法
162
查看次数

如何计算插值三角形曲面上的主曲率?

给定3D三角形网格中的3个顶点及其法线,我将它们插入到三角形表面上.我想计算该表面中每个点的主曲率k1,k2.

我的代码简要如下:

Vertex v1,v2,v3,v12,p,vp; // Vertex is an structure of x,y,z and some operators
v1 = ...;   v2 = ...;   v3 = ...;
Vertex n1,n2,n3,n12,n;//normals
n1 = ...;   n2 = ...;   n3 = ...;
int interLevels = ceil(sqrt(tArea(v1,v2,v3)));
for (float a=0; a<=1;a+=1.0f/interLevels){
    v12 = v1*a+v2*(1-a);
    n12 = n1*a+n2*(1-a);
    for (float b=0; b<=1;b+=1.0f/interLevels){
        p = v12*b+v3*(1-b);
        n = n12*b+n3*(1-b);
        normalize(n);

        Vertex k1,k2;       

    }
}
Run Code Online (Sandbox Code Playgroud)

我们如何计算k1和k2?是否足以依赖给定的输入,还是应该考虑附近的顶点?

c++ opengl math graphics image-processing

1
推荐指数
1
解决办法
1515
查看次数

如何在C++代码中获取终端尺寸?

我最近试图获得运行该程序的终端的大小.
问题是脚本+程序解决方案不方便,它不支持用户输入或终端大小更改.

我怎么能在C++代码中做到这一点(没有弄乱脚本)?
我的代码:
Bash文件(要运行的文件而不是C++程序):

cols=`tput cols`
lines=`tput lines`
input="${cols}\n${lines}"
echo -ne "${input}" | [C++ program]
Run Code Online (Sandbox Code Playgroud)

C++文件(实际程序):

#include <iostream>

int main() {
  unsigned lines;
  unsigned cols;
  cin >> cols;
  cin >> lines;
  // some code here
}
Run Code Online (Sandbox Code Playgroud)

c c++ linux bash terminal

1
推荐指数
1
解决办法
2094
查看次数

linux内核模块:内核方法未定义(kthread_create_on_cpu)

方法

struct task_struct *kthread_create_on_cpu(int(*threadfn)(void *data),
    void *data, unsigned int cpu,
    const char *namefmt)
Run Code Online (Sandbox Code Playgroud)

在 kthread.c 文件中定义并在 kthread.h 中原型化。但它没有出口。

在我的驱动程序中,我想在给定的 CPU 上启动一个 kthread,所以我这样做:

#include <linux/kthread.h>

int udpsrv_start_single( unsigned int cpu)
{
     DEBUG_PRINT_INFO( "[udpsrv] udpsrv_start: Initializing...\n");
     //(...)
     kthread->thread = kthread_create_on_cpu((void *)kthread_start_single, 
                                                      NULL, cpu, "mpsrv");
     //(...)
Run Code Online (Sandbox Code Playgroud)

我可以编译,但在解析 MODPOST 上的模块符号时出现链接错误:

1>    LD [M]  /tmp/VisualKernel/mpsrvlkm.o
1>    Building modules, stage 2.
1>    MODPOST 1 modules
1>EXEC : warning : "kthread_create_on_cpu"[/tmp/VisualKernel/mpsrvlkm.ko] undefined!
Run Code Online (Sandbox Code Playgroud)

我应该如何进行?如何导入此符号或该怎么做?

c linux driver kernel-module linux-kernel

1
推荐指数
1
解决办法
970
查看次数