我可以在C++中定义一个带有多个参数的数组运算符吗?我试过这样的:
const T& operator[](const int i, const int j, const int k) const{
return m_cells[k*m_resSqr+j*m_res+i];
}
T& operator[](const int i, const int j, const int k){
return m_cells[k*m_resSqr+j*m_res+i];
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
error C2804 binary operator '[' has too many parameters
Run Code Online (Sandbox Code Playgroud) 有人能指点我一篇文章,或者在这里写一些关于一些C++编程习惯的技巧,这些习惯通常是有效的(没有真正的缺点)并且可以提高性能吗?我不是指编程模式和算法的复杂性 - 我需要一些小的东西,比如你如何定义你的函数,要做的事情/要避免在循环中,在堆栈上分配什么,堆上的内容等等.
这不是关于如何更快地制作一个特定的软件,也不是关于如何创建一个干净的软件设计,而是关于编程习惯 - 如果你总是应用它们,你将使你的代码比速度稍慢一点.
如果使用继承/多重继承,数据成员如何对齐/排序?这个编译器是否具体?
有没有办法在派生类中指定如何对成员(包括基类中的成员)进行排序/对齐?
谢谢!
将无符号舍int
入为多个的快速方法是4
什么?
4的倍数有两个最低有效位0,对吗?所以我可以将它们掩盖掉,然后执行一个switch语句,在给定的内容中添加1,2或3 uint
.
这不是一个非常优雅的解决方案..
还有算术综述:
myint == 0 ? 0 : ((myint+3)/4)*4
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法,包括一些位操作?
我对采样定理有问题
采样定理指出,如果原始信号的频率不高于采样频率的一半,则可以从其样本中精确地重建信号.
但是频率恰好是采样频率的一半?假设我采样一个正弦频率(具有任意相位和幅度),其频率恰好是正弦频率的两倍.我将无法重建正弦的相位和幅度,因为我不知道相位如何相对于我的样本移动正弦(例如,如果我恰好在正弦的过零点上进行采样,我的样本都是零).
这个问题的解决方案是什么?
我对Xcode(以及Mac)很新.我开始了一个小小的iPhone项目 - 尽可能用C++编写 - 并且只是注意到我的断言(); 命令也在释放模式下执行.
这是一个已知问题,如何正确解决?
谢谢!
我现在正在尝试很长一段时间来优化我的游戏帧速率而不会取得进展.我正在运行最新的iPhone SDK并拥有iPhone 3G 3.1.2设备.
我调用了大约150个drawcalls,总共渲染了大约1900个三角形(所有对象都使用两个纹理层和多纹理进行纹理化.大多数纹理来自存储在pvrtc 2bpp压缩纹理中的相同textureAtlasTexture).这在我的手机上以30 fps的速度呈现,在我看来,这对于仅1900个三角形来说太低了.
我尝试了许多方法来优化性能,包括将对象批处理,在CPU上转换顶点以及在单个drawcall中渲染它们.这个yelds 8 drawcalls(选择150个drawcalls),但性能大致相同(fps降至26fps左右)
我使用存储在交错数组中的32字节顶点(12字节位,12字节法线,8字节uv).我正在渲染triangleLists,顶点按TriStrip顺序排序.
我做了一些分析,但我真的不知道如何解释它.
仪器 - 使用仪器采样和采样这个结果:http://neo.cycovery.com/instruments_sampling.gif 告诉我在"mach_msg_trap"中花了很多时间.我用谷歌搜索它,似乎调用这个函数是为了等待其他一些事情.但等待什么?
仪器 - 带有openGL模块的openGL仪器大喊这个结果:http://neo.cycovery.com/intstruments_openglES_debug.gif 但是我真的不知道这些数字告诉我的是什么
鲨鱼剖析:使用鲨鱼进行剖析并没有告诉我太多:http: //neo.cycovery.com/shark_profile_release.gif 最大数字是10%,由DrawTriangles使用 - 其余部分用于非常小的百分比函数
任何人都可以告诉我,我还能做些什么来找出瓶颈并帮助我解释这些分析信息?
非常感谢!
我只是试着了解以下情况的行为:
template <typename T1>
struct A{
template <typename T2>
A(T2 val){
cout<<"sizeof(T1): "<<sizeof(T1)<<" sizeof(T2): "<<sizeof(T2)<<endl;
}
T1 dummyField;
};
Run Code Online (Sandbox Code Playgroud)
所以 - 该类用T1模板化,构造函数用T2模板化
现在 - 如果我写:
A<bool> a = A<bool>(true);
Run Code Online (Sandbox Code Playgroud)
输出符合预期:
sizeof(T1): 1 sizeof(T2): 1
Run Code Online (Sandbox Code Playgroud)
但是 - 如果我写:
A<bool> a = A<float>(3.5f);
Run Code Online (Sandbox Code Playgroud)
输出是:
sizeof(T1): 4 sizeof(T2): 4
sizeof(T1): 1 sizeof(T2): 4
Run Code Online (Sandbox Code Playgroud)
为什么构造函数使用模板参数float调用两次?
谢谢你满足我的好奇心
我正在进行一些刚体模拟.我使用Irrlicht引擎进行显示,使用openMesh来处理网格.
现在我使用VerySleepy描述了我的应用程序并发现大部分时间都花在以下函数中(不包括在子函数中花费的时间):
RtlCompareMemoryUlong模块"ntdll"源文件中的30%"未知"
KiFastSystemCallRet在模块"ntdll"源文件"未知"内21%
RtlFillMemoryUlong模块"ntdll"源文件中的9%"未知"
所以50%的时间花在这些功能上,我不会在我的代码中的某个地方调用它们,我不明白它们在做什么.我怀疑它与图形有关,因为我只显示非常简单的网格.
有人能给我一个提示,告诉我如何找出为什么调用这些函数以及如何摆脱它?
谢谢!
是否可以/ ok返回一个const引用,即使函数返回的值是该函数的局部变量?我知道一旦函数返回,本地函数就不再有效 - 但如果函数是内联的并且返回的值仅在调用者范围内使用,该怎么办?然后函数的本地应该包含在调用者堆栈框中,不是吗?
c++ ×7
xcode ×2
alignment ×1
arrays ×1
assertions ×1
c ×1
const ×1
constructor ×1
inheritance ×1
inline ×1
iphone ×1
math ×1
opengl-es ×1
operators ×1
performance ×1
profiling ×1
reference ×1
release ×1
templates ×1
theory ×1
verysleepy ×1