小编use*_*501的帖子

C++为什么我可以在类定义中初始化静态const char而不是静态const double?

这是两行代码:

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它不是"整体类型".但为什么整数和浮点类型之间的行为不同?

c++ static-members constexpr c++11

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

枚举类"无法转换为unsigned int"

我有一个像这样的枚举类:

    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

c++ casting enum-class

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

ld链接器错误"cpu模型隐藏符号"

尝试在ubuntu 16.04上编译sfml程序时出现ld错误.这显然是一个已知的问题,应该有一个解决方法,但我不明白它是什么...

http://web.archive.org/web/20160509014317/https://gitlab.peach-bun.com/pinion/SFML/commit/3383b4a472f0bd16a8161fb8760cd3e6333f1782.patch

由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

有没有其他人遇到此错误并成功解决了?

c++ linker sfml ubuntu-16.04 g++-5

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

使用2个线程的代码比使用1的代码运行慢6倍

原始问题:

所以我编写了一些代码来试验线程并进行一些测试.

代码应创建一些数字,然后找到这些数字的平均值.

我想现在向你展示我所拥有的东西会更容易.我期待两个线程的代码运行速度大约是其两倍.用秒表测量它我觉得它运行速度慢了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)

c++ optimization performance multithreading

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

C++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?

对于循环和多个变量和条件.

我使用for循环来设置源和目标索引来复制数组中的项目.

for(int src = 0, dst = 8;
    src < 8, dst >= 0;
    src ++, dst --)
{
    arr2[dst] = arr1[src];
}
Run Code Online (Sandbox Code Playgroud)

无论如何都是这样的.

(和)|| (||)

我的问题是退出条件.这里有两个.src < 8dst >= 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)

或者它是完全不同的东西?我认为合乎逻辑的做法是评估我在上面指定的两种方式中的一种,而不是其他方式.

c++ for-loop multiple-conditions

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

gluPerspective,glViewport,gluLookAt以及GL_PROJECTION和GL_MODELVIEW Matricies

原始问题

我想使用'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)

opengl mode matrix glulookat

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

枚举类可以嵌套吗?

可以这样做吗?

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)

希望使用强类型功能.

c++ c++11 enum-class

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

我可以使用迭代器访问优先级的元素吗?

向量和链接列表

向量以串行方式存储在存储器中,因此可以使用数据库访问任何元素operator[],就像在数组中一样.

链表包含可能不会连续存储在内存中的元素,因此必须使用迭代器通过以下指针访问随机元素.

(你可能已经知道了.)

优先级的优势

最近我发现了'优先级队列',它有点像堆栈,但是元素被push()装入容器中operator<,我相信这个功能根据与之比较的顺序将它们放在一个顺序中.

这非常适合我,因为我正在测试事件并根据它们发生的剩余时间将它们放入队列中.队列会自动按照我push()pop()元素对它进行排序.(弹出不影响顺序.)我可以写一个operator<所以这不是问题.

我无法解决的问题

我需要对此事件队列执行三项操作:

1 :)在事件队列中搜索项目.我假设这可以通过标准库中的算法来完成?例如,'找'?如果不是,我可以自己实施,只要我可以做第2点.(见下文)

2 :)迭代队列.我认为默认的底层容器是std::vector......有没有办法访问底层向量中的随机元素?如果我选择使用该std::deque怎么办?我需要这样做来修改某些事件参数.(事件放在队列中.)例如,我可能需要处理一个事件,然后从每个剩余事件的'time_to_event'参数中减去一个恒定的时间.我怀疑由于这个问题不能做到这一点.

3 :)从队列中删除一个元素.有时在处理事件时,其他事件会失效,因此需要删除.

点1-3可以完成吗?我所拥有的所有信息std::priority_queue都来自cplusplus.com,所以我的默认答案是"不",没有办法做任何这些事情.如果我不能做所有这三件事,那么我想我将不得不编写自己的优先级队列包装器.(哦很无聊)

c++ priority-queue c++11

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

在C++中定义一个'for'循环宏

也许它不是很好的编程实践,但可以定义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)

c++ loops for-loop c-preprocessor

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

带括号的新运算符"(",")"而不是括号"[","]"

我在代码中发现了一个疯狂的错误.

我写了以下这一行:

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++

7
推荐指数
3
解决办法
1007
查看次数