这是两行代码:
static const double RYDBERG_CONST_EV = 13.6056953;
static const char CHAR_H_EDGE = '-';
Run Code Online (Sandbox Code Playgroud)
第二行编译没有错误,第一行不编译.(错误:'constexpr' needed for in-class initialization of static data member...)
解决方案显然是constexpr在类型之前添加关键字.这是必需的,因为double它不是"整体类型".但为什么整数和浮点类型之间的行为不同?
我有一个像这样的枚举类:
typedef unsigned int binary_instructions_t;
enum class BinaryInstructions : binary_instructions_t
{
END_INSTRUCTION = 0x0,
RESET,
SET_STEP_TIME,
SET_STOP_TIME,
START,
ADD
};
Run Code Online (Sandbox Code Playgroud)
我试图在这样的switch语句中使用枚举的成员:
const std::string& function(binary_instructions_t arg, bool& error_detect)
{
switch(arg)
{
case (unsigned int)BinaryInstructions::END_INSTRUCTION:
return "end";
break;
}
translate_error = true;
return "ERROR";
}
Run Code Online (Sandbox Code Playgroud)
(unsigned int)当底层类型已经是一个时,为什么需要强制转换unsigned int?
尝试在ubuntu 16.04上编译sfml程序时出现ld错误.这显然是一个已知的问题,应该有一个解决方法,但我不明白它是什么...
由ld吐出的错误是
hidden symbol `__cpu_model' in /usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a(cpuinfo.o) is referenced by DSO
Run Code Online (Sandbox Code Playgroud)
没有相关的代码 - 据我所知,如果要链接的程序包含诸如sf::Texture和的对象,则所有带有g ++ 5的ubuntu 16.04系统都会产生此错误sf::Sprite.(我不知道比这更详细.)
我也试过用g ++ 4.9进行编译,但是会出现同样的错误.
我的编译行是 g++-4.9 --std=c++11 -Wall main.cpp -lsfml-graphics -lsfml-window -lsfml-system -o a.out
有没有其他人遇到此错误并成功解决了?
所以我编写了一些代码来试验线程并进行一些测试.
代码应创建一些数字,然后找到这些数字的平均值.
我想现在向你展示我所拥有的东西会更容易.我期待两个线程的代码运行速度大约是其两倍.用秒表测量它我觉得它运行速度慢了6倍!编辑:现在使用计算机和clock()函数来告诉时间.
void findmean(std::vector<double>*, std::size_t, std::size_t, double*);
int main(int argn, char** argv)
{
// Program entry point
std::cout << "Generating data..." << std::endl;
// Create a vector containing many variables
std::vector<double> data;
for(uint32_t i = 1; i <= 1024 * 1024 * 128; i ++) data.push_back(i);
// Calculate mean using 1 core
double mean = 0;
std::cout << "Calculating mean, 1 Thread..." << std::endl;
findmean(&data, 0, data.size(), &mean);
mean /= (double)data.size();
// Print result
std::cout << " Mean=" …Run Code Online (Sandbox Code Playgroud) 我使用for循环来设置源和目标索引来复制数组中的项目.
for(int src = 0, dst = 8;
src < 8, dst >= 0;
src ++, dst --)
{
arr2[dst] = arr1[src];
}
Run Code Online (Sandbox Code Playgroud)
无论如何都是这样的.
我的问题是退出条件.这里有两个.src < 8和dst >= 0.这些条件是AND-ed(&&)还是OR-ed(||).
为了进一步解释,条件评估如下:
(src < 8) && (dst >= 0)
Run Code Online (Sandbox Code Playgroud)
或者他们是这样评价的?
(src < 8) || (dst >= 0)
Run Code Online (Sandbox Code Playgroud)
或者它是完全不同的东西?我认为合乎逻辑的做法是评估我在上面指定的两种方式中的一种,而不是其他方式.
我想使用'gluPerspective','glViewport'和'gluLookAt'来操纵我的相机和屏幕.
哪个函数适用于哪种矩阵模式?我应该以什么顺序使用它们?
例如,我试图像这样设置我的屏幕和相机:(但它不起作用!)
glMatrixMode(GL_PROJECTION) // Apply following to projection matrix - is this correct?
glLoadIdentity(); // Reset first
glPerspective(45.0, (double)w/(double)h, 1.0, 200.0); // Set perspective
glViewport(0, 0, w, h); // Set viewport
glMatrixMode(GL_MODELVIEW); // Apply following to modelview - should glViewport come under here?
glLoadIdentity(); // Reset first
gluLookAt(px, py, pz, cx, cy, cz, ux, uy, uz); // Set position, centre and then up vectors
// This surely comes after calling GL_MODELVIEW?
Run Code Online (Sandbox Code Playgroud)
我一直在寻找在线文档,我理解这些功能,而不是它们应该去的地方以及它们的顺序!
现在几个月后,我正在添加一个快速编辑,以显示我用于使用OpenGL渲染事物的系统.这是为了帮助将来看到这个问题的其他人.
我主要使用两种方法.
方法1:
此方法将所有内容组合在一
// …Run Code Online (Sandbox Code Playgroud) 可以这样做吗?
enum A
{
enum B
{
SOMETHING1,
SOMETHING2
};
enum C
{
SOMETHING3,
SOMETHING4
};
};
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有替代解决方案?
这个问题的目的:想要/需要能够做这样的事情:
enum class ElementaryParticleTypes
{
enum class MATTER
{
enum class MESONS
{
PI
};
enum class BARYONS
{
PROTON,
NEUTRON
};
enum class LEPTONS
{
ELECTRON
};
};
enum class ANTI_MATTER
{
enum class ANTI_MESONS
{
ANTI_PI
};
enum class ANTI_BARYONS
{
ANTI_PROTON
ANTI_NEUTRON
};
enum class ANTI_LEPTONS
{
POSITRON
};
};
};
Run Code Online (Sandbox Code Playgroud)
希望使用强类型功能.
向量以串行方式存储在存储器中,因此可以使用数据库访问任何元素operator[],就像在数组中一样.
链表包含可能不会连续存储在内存中的元素,因此必须使用迭代器通过以下指针访问随机元素.
(你可能已经知道了.)
最近我发现了'优先级队列',它有点像堆栈,但是元素被push()装入容器中operator<,我相信这个功能根据与之比较的顺序将它们放在一个顺序中.
这非常适合我,因为我正在测试事件并根据它们发生的剩余时间将它们放入队列中.队列会自动按照我push()和pop()元素对它进行排序.(弹出不影响顺序.)我可以写一个operator<所以这不是问题.
我需要对此事件队列执行三项操作:
1 :)在事件队列中搜索项目.我假设这可以通过标准库中的算法来完成?例如,'找'?如果不是,我可以自己实施,只要我可以做第2点.(见下文)
2 :)迭代队列.我认为默认的底层容器是std::vector......有没有办法访问底层向量中的随机元素?如果我选择使用该std::deque怎么办?我需要这样做来修改某些事件参数.(事件放在队列中.)例如,我可能需要处理一个事件,然后从每个剩余事件的'time_to_event'参数中减去一个恒定的时间.我怀疑由于这个问题不能做到这一点.
3 :)从队列中删除一个元素.有时在处理事件时,其他事件会失效,因此需要删除.
点1-3可以完成吗?我所拥有的所有信息std::priority_queue都来自cplusplus.com,所以我的默认答案是"不",没有办法做任何这些事情.如果我不能做所有这三件事,那么我想我将不得不编写自己的优先级队列包装器.(哦很无聊)
也许它不是很好的编程实践,但可以定义for循环宏吗?
例如,
#define loop(n) for(int ii = 0; ii < n; ++ ii)
Run Code Online (Sandbox Code Playgroud)
效果很好,但不能让你改变变量名ii.
它可以用于:
loop(5)
{
cout << "hi" << " " << "the value of ii is:" << " " << ii << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是没有名称/符号的选择ii.
可以这样做吗?
loop(symbol_name, n)
Run Code Online (Sandbox Code Playgroud)
程序员将符号名称插入" symbol_name".
用法示例:
loop(x, 10)
{
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud) 我在代码中发现了一个疯狂的错误.
我写了以下这一行:
GLfloat* points = new GLfloat(1024);
Run Code Online (Sandbox Code Playgroud)
而不是
GLfloat* points = new GLfloat[1024];
Run Code Online (Sandbox Code Playgroud)
我才注意到它.在我发现错误之前,我的代码编译并运行了几次.我意识到这是侥幸的,但我的问题是我最初的线路是什么?
我注意到它看起来有点像使用指向已分配内存的指针创建一个类.它是否在堆上创建单个GLfloat,初始值为1024.0?如果这是真的,为什么它是有效的语法?(GLfloat不是一个类,是吗?)
c++ ×9
c++11 ×3
enum-class ×2
for-loop ×2
casting ×1
constexpr ×1
g++-5 ×1
glulookat ×1
linker ×1
loops ×1
matrix ×1
mode ×1
opengl ×1
optimization ×1
performance ×1
sfml ×1
ubuntu-16.04 ×1