小编Mar*_*sne的帖子

使用宏增加c ++代码详细程度

我希望有可能为我的程序的调试目的增加详细程度.当然,我可以在运行时使用开关/标志来做到这一点.但由于我应该在代码中添加所有"if"语句,因此效率非常低.

所以,我想在编译期间添加一个标志,以便在我的代码中包含可选的,通常很慢的调试操作,而不会在不需要时影响程序的性能/大小.这是一个例子:

/* code */
#ifdef _DEBUG_
/* do debug operations here 
#endif
Run Code Online (Sandbox Code Playgroud)

因此,使用-D_DEBUG_进行编译应该可以解决问题.没有它,那部分将不会包含在我的程序中.

另一种选择(至少对于i/o操作)将至少定义一个i/o函数,如

#ifdef _DEBUG_
#define LOG(x) std::clog << x << std::endl;
#else
#define LOG(x) 
#endif
Run Code Online (Sandbox Code Playgroud)

但是,我强烈怀疑这可能不是最干净的方法.那么,你会做什么呢?

c++ debugging macros

14
推荐指数
2
解决办法
1535
查看次数

查找表与运行时计算效率 - C++

我的代码需要从以下函数连续计算一个值:

inline double f (double x) {
    return ( tanh( 3*(5-x)  ) *0.5 + 0.5);
}
Run Code Online (Sandbox Code Playgroud)

分析表明程序的这一部分是花费大部分时间的地方。由于该程序将运行数周甚至数月,我想优化此操作并正在考虑使用查找表。

我知道查找表的效率取决于表本身的大小以及它的设计方式。目前我不能使用少于 100 MB,最多可以使用 2GB。矩阵中两点之间的值将被线性插值。

使用查找表会比进行计算更快吗?此外,使用 N 维矩阵是否会比一维 std::vector 更好,并且不应跨越的表大小的阈值(如果有)是多少?

c++ optimization performance caching lookup-tables

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

为什么我可以在c ++中将非void成员函数称为void void函数?

我有一个以(公共)函数为特色的类返回一个向量(但它似乎无关紧要).

std::vector<int> test() {
return std::vector<int>(1,0);
}
Run Code Online (Sandbox Code Playgroud)

为什么我被允许称它为虚函数,

test();
Run Code Online (Sandbox Code Playgroud)

没有得到编译错误,或者至少有警告(Wall,pedantic)?

c++ return-value

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

编译器如何选择合适的函数?

我写了一个小的3d矢量类.特别是我写了两个函数,一个用于旋转向量,另一个用于返回向量本身的旋转副本.所以我有以下内容:

Vector Vector::Rotate(const double angle, Vector& axis) const {
Vector b=*this;
b.Rotate(angle,axis);
return (b);
}

void Vector::Rotate(const double angle, Vector & axis) {

/* let's promote this vector to a quaternion */
Quaternion V (0,*this);

/* quaternion describing the rotation */
Quaternion q (cos(angle/2),axis*sin(angle/2));

/* actual rotation  */
*this = (q*V*q.conjugate()).Vec();
}
Run Code Online (Sandbox Code Playgroud)

现在,当我写这样的东西时:

 vector2 = vector1.Rotate(rbo::M_PUCKER,i);
Run Code Online (Sandbox Code Playgroud)

我得到错误:没有运算符"="匹配这些操作数操作数类型是:Vector = void

我希望编译器能够理解我想要的东西:他为什么选择void版本而不是另一个返回向量?而且,按照我的方式编写更多相同功能的版本是一种很好的做法吗?

c++ compiler-construction overloading

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