小编Xir*_*dus的帖子

三元运算符?:vs if ... else

在C++中,?:运算符比if()... else语句更快?它们在编译代码中有什么区别吗?

c++ performance conditional-operator

69
推荐指数
4
解决办法
9万
查看次数

静态向量的初始化

我想知道是否存在初始化静态向量的"更好"方式而不是下面的方法?

class Foo
{
    static std::vector<int> MyVector;
    Foo()
    {
        if (MyVector.empty())
        {
            MyVector.push_back(4);
            MyVector.push_back(17);
            MyVector.push_back(20);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例代码:)

push_back()中的值是独立声明的; 不是数组或其他东西.

编辑:如果不可能,告诉我也:)

c++ static-members stdvector

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

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

operator作为模板参数

可能吗?

template<operator Op> int Calc(int a, b)
{ return a Op b; }

int main()
{ cout << Calc<+>(5,3); }
Run Code Online (Sandbox Code Playgroud)

如果没有,是没有ifs和开关实现这一目标的方法吗?

c++ templates operators

18
推荐指数
2
解决办法
4246
查看次数

纹理数组大小的限制是什么?

我有点了解纹理阵列是什么,但在互联网上我无处可找到它们实际上是什么的信息.它们是否像一个大的纹理图集(单个连续的记忆块被划分为相同尺寸的部分),或者它们是否像纹理单元(完全独立的纹理,你可以同时绑定)?这个问题的结果是,单个纹理数组的大小限制是多少,以及如何有效地使用它们?例如,如果我的GPU处理4096x4096纹理和64个单位,我可以创建64个4096x4096纹理的纹理数组吗?或者是每个阵列的实际限制为4096*4096像素?或者别的什么?如何查询限制?

opengl textures

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

访问同类对象的私有元素

这合法吗?如果没有,以下代码是否允许这样做?

class Foo
{
    friend class Foo;
}
Run Code Online (Sandbox Code Playgroud)

c++ private class private-members

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

如何使用C++ 11语言环境设施将UTF-8用作字符串的内部表示?

我正在编写一个处理文件和目录的可移植库.我想使用UTF-8作为输入(目录路径)和输出(文件路径).问题是,Windows让我可以选择使用UTF-16-UCS-2和代码页.所以我必须将我的所有UTF-8字符串转换为UTF-16,将它们传递给WinAPI,然后将结果转换回UTF-8.C++ 11似乎<locale>只为此提供了库,除了我所理解的,没有任何预定义的特化使用UTF-8作为内部(即我的)编码 - 最接近的是UTF-16到UTF -8,这我想要的完全相反.所以这是第一个问题:

1)如何使用codecvt thingamajigs将我的UTF-8字符串转换为UTF-16进行WinAPI调用,UTF-16结果返回UTF-8?

另一个问题:我也在瞄准Linux.在Linux上,对许多不同的语言环境有很好的支持 - 我不希望有任何不同.希望每个人都在他们的Linux机器上使用UTF-8,但没有严格的保证.所以我认为扩展上面特定于Windows的行为并始终执行UTF-8到系统区域设置编码是一个好主意.除了我没有看到在C++ 11的<locale>库中有任何方法来获得当前的系统编码!默认的std :: locale构造函数使用自己定义的语言环境,如果不这样做,它将返回经典的"C"语言环境.并且没有其他我知道的吸气剂.所以这是第二个问题:

2)如何检测当前系统区域设置?什么东西<locale>?也许一些标准的C库函数,或者(在这种情况下可移动性较差)POSIX API中的东西?

c++ encoding locale utf-8 c++11

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

具有自动默认和移动构造函数的Uncopyable类

我想让一些类使用自动生成的构造函数,但是不可复制(但仍可移动).目前我这样做:

class A
{
public:
    A() = default;
    A(const A&) = delete;
    A(A&&) = default;
    A& operator=(const A&) = delete;
    A& operator=(A&&) = default;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否真的有必要这么明确.如果我这样写的话怎么办:

class A
{
    A(const A&) = delete;
    A& operator=(const A&) = delete;
}
Run Code Online (Sandbox Code Playgroud)

它仍然可以工作吗?对于其他情况,最小的默认值和删除集是什么 - 不可复制的非可移动类和具有虚拟析构函数的类?

是否有任何测试代码可用于快速查看隐式创建的构造函数?

c++ default-copy-constructor move-constructor c++11

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

使用深度缓冲区对 2D 精灵进行分层

我正在使用 OpenGL 制作 2D 游戏。我想做这样的绘图,首先我将要绘制的所有对象的顶点数据复制到 VBO(每个纹理/着色器一个 VBO),然后在单独的绘图调用中绘制每个 VBO。这似乎是一个好主意,直​​到我意识到它会弄乱绘制顺序 - 绘制调用不一定按照对象加载到 VBO 的顺序进行。我想过使用深度缓冲区对项目进行排序 - 每个要绘制的新对象的 Z 位置都会稍高一些。问题是,我应该增加多少才不会遇到任何问题?AFAIK,可能有两种问题 - 如果我把它设置得太大,那么我可以在一个帧中绘制的对象数量有限,如果我把它设置得太小,深度缓冲区的精度损失可能会导致重叠的图像以错误的顺序绘制。总结一下:

1)我的正投影的前后值应该是多少?0比1?-1比1?1比2?有关系吗?

2) 如果我使用 的 nextafter() 来增加 Z 位置,我会遇到什么样的麻烦?OpenGL 和深度缓冲区如何对次正常浮点数做出反应?如果我从 std::numeric_limits::min() 开始,并以 1 结束,还有什么我应该担心的吗?

c++ opengl floating-point depth-buffer

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

Java 8 forEach over Multiple IntStreams

我有以下代码:

    IntStream.range(0, width).forEach(x1 -> {
        IntStream.range(0, height).forEach(y1 -> {
            IntStream.rangeClosed(x1-1, x1+1).forEach(x2 -> {
                IntStream.rangeClosed(y1-1, y1+1).forEach(y2 -> {
                    if ((x1 != x2 || y1 != y2) && getNode(x2, y2) != null){
                        getNode(x1, y1).registerObserverAtNeighbor(getNode(x2, y2));
                    }
                });
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

有没有办法使用较少的嵌套语句编写上述内容?它基本上是"从(0,0)到(宽度,高度)寄存器观察者的每个节点从(x-1,y-1)到(x + 1,y + 1)的节点,但不是在自身".

java lambda java-8 java-stream

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