小编Chr*_*s_F的帖子

将std :: array与初始化列表一起使用

除非我弄错了,否则应该可以通过以下方式创建一个std:array:

std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });
Run Code Online (Sandbox Code Playgroud)

然而,使用GCC 4.6.1我无法使其中任何一个工作.编译器简单地说:

expected primary-expression before ',' token
Run Code Online (Sandbox Code Playgroud)

然而初始化列表与std :: vector一起工作正常.那是哪个呢?我错误地认为std :: array应该接受初始化列表,还是让GNU标准C++库团队搞错了?

c++ libstdc++ c++11

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

为什么Clang会优化此代码?

代码的目的是找到32位浮点位模式的总数,它代表0到1之间的值.在我看来这应该可行,但由于某种原因,Clang的汇编输出基本上相当于return 0;.

我使用-std=c++1y -Wall -Wextra -pedantic -O2和编译了Clang 3.3和Clang 3.4.1-std=c++1y -Wall -Wextra -pedantic -O3

Clang 3.4使用-O2和-O3优化一切.

Clang 3.3仅使用-O3优化一切.

通过"优化一切",我的意思是这是程序的汇编输出:

main:                                   # @main
    xorl    %eax, %eax
    ret
Run Code Online (Sandbox Code Playgroud)
#include <limits>
#include <cstring>
#include <cstdint>

template <class TO, class FROM>
inline TO punning_cast(const FROM &input)
{
    TO out;
    std::memcpy(&out, &input, sizeof(TO));
    return out;
}

int main()
{
    uint32_t i = std::numeric_limits<uint32_t>::min();
    uint32_t count = 0;

    while (1)
    {
        float n = punning_cast<float>(i);
        if(n >= 0.0f && n <= 1.0f) …
Run Code Online (Sandbox Code Playgroud)

c++ clang compiler-optimization

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

为什么这不是一个恒定的表达?

在这个简单的例子中,test2即使test1成功也无法编译,我不明白为什么会这样.如果arr[i]适用于标记函数的返回值,constexpr那么为什么它不能用作非类型模板参数?

template<char c>
struct t
{ 
    static const char value = c;
};

template <unsigned N>
constexpr char test1(const char (&arr)[N], unsigned i)
{
    return arr[i];
}

template <unsigned N>
constexpr char test2(const char (&arr)[N], unsigned i)
{
    return t<arr[i]>::value;
}

int main()
{
   char a = test1("Test", 0); //Compiles OK
   char b = test2("Test", 0); //error: non-type template argument 
                              //is not a constant expression
}
Run Code Online (Sandbox Code Playgroud)

编辑:这没有区别:

template<char c>
struct t
{ …
Run Code Online (Sandbox Code Playgroud)

c++ templates constexpr c++11 c++14

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

为什么 std::vector 不能接受 size_t 类型的 iota_view 迭代器?

以下代码在nis时无法编译,但在和size_t时运行良好。intunsigned

#include <vector>
#include <ranges>

int main() {
    size_t n = 1;
    auto view = std::ranges::iota_view{n, n};
    std::vector test(view.begin(), view.end()); //std::vector dislikes these iterators
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/a3eGeMWqh

c++ iterator c++20 std-ranges

20
推荐指数
2
解决办法
1665
查看次数

为什么GCC或Clang在使用快速数学时不能优化1指令的倒数

有谁知道为什么GCC/Clang不会在下面的代码示例中优化函数test1,只是在使用fast-math选项时只使用RCPPS指令?是否有另一个编译器标志会生成此代码?

typedef float float4 __attribute__((vector_size(16)));

float4 test1(float4 v)
{
    return 1.0f / v;
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看已编译的输出:https://goo.gl/jXsqat

c++ sse simd compiler-optimization fast-math

15
推荐指数
2
解决办法
1209
查看次数

Chrome中无法解释的行为,是我的代码还是他们的代码?

我有一个网页,其中一个视频元素嵌套在div class ="video-container"中,还有一个div class ="video-control-bar",我正在使用JQuery来制作动画.我也使用setInterval来查询视频元素的currentTime,并在视频控制栏中包含的进度条中反映出来.

JavaScript的:

$(function(){
  $(".video-container").each(function(){
    player_init($(this))
  })
})

function player_init(self)
{
  setInterval(function(){
    var video = self.find("video")[0]
    self.find(".video-control-bar").find(".video-position").find("input").val(video.currentTime / video.duration)
    self.find(".video-control-bar").find(".video-position").find("progress").val(video.currentTime / video.duration)
  }, 500)
  self.hover(function(){
    self.find(".video-control-bar").stop().animate({bottom: "0px"}, 25)
  }, function(){
    self.find(".video-control-bar").stop().animate({bottom: "-39px"}, 350)
  })
}
Run Code Online (Sandbox Code Playgroud)

问题?好吧,在Chrome中,如果我加载页面,我的setInterval函数会像预期的那样每500毫秒被调用一次,直到我将鼠标移到播放器上,从而导致控制条动画.之后,不再对我的setInterval函数进行调用.

但是,如果我点击刷新,页面重新加载,我可以将鼠标悬停在我想要的所有内容上,一切都继续正常工作.但只有我通过刷新加载页面.

这在Firefox中不会发生.我怀疑它可能是Chrome中的一个错误,因为它类似于我在此处提交的问题.

我真的不知道我的工作方式是否有问题,JQuery的问题或Chrome中的错误.我真的不在乎它是谁的错,我只想让事情发挥作用.

谢谢.

html jquery html5 google-chrome

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

如何在MinGW中编译DirectX 11应用程序

我看了,我找不到任何与使用Direct3d 10或11与MinGW有关的材料.要做些什么,我该怎么做?我在DX SDK提供的头文件中遇到错误.

甚至没有人想到建议使用Visual Studio.

directx mingw directx-11

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

使用vsync(OpenGL)时100%的CPU利用率

这是一个非常简单的测试程序.禁用vsync时,该程序以100FPS运行,几乎占用CPU的0%.当我启用vsync时,我得到60FPS和25%(4核系统上一个核心的100%)CPU利用率.这是使用Nvidia GPU.在线搜索引导我建议禁用Nvidia控制面板内的"多线程优化".这确实会降低CPU利用率,但只会降低10%.此外,如果我在SwapBuffers之后删除了睡眠调用,即使禁用了多线程优化,我也会再次获得25%的利用率.任何人都可以对此有所了解吗?难道我做错了什么?Nvidia的OpenGL实现是否无可救药地存在缺陷?

#include <GLFW/glfw3.h>
#include <thread>
#include <cstdlib>
#include <cstdio>

int main(int argc, char *argv[])
{
    if(!glfwInit())
        exit(EXIT_FAILURE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL Vsync Test", nullptr, nullptr);

    if(!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwMakeContextCurrent(window);

#ifdef USE_VSYNC
    glfwSwapInterval(1);
#else
    glfwSwapInterval(0);
#endif

    glClearColor(1.0f, 0.0f, 0.0f, 1.0f);

    double lastTime = glfwGetTime();
    double nbFrames = 0;

    while(!glfwWindowShouldClose(window))
    {
        double currentTime = glfwGetTime();
        nbFrames++;
        if (currentTime - lastTime >= 1.0)
        {
            char cbuffer[50];
            snprintf(cbuffer, sizeof(cbuffer), "OpenGL Vsync Test [%.1f fps, %.3f ms]", nbFrames, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl driver nvidia vsync

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

为什么这个onpaste事件没有解雇?

我正在尝试捕获input[type="date"]元素的粘贴事件.在Chrome中,您无法复制/粘贴到此类元素中,因此我尝试将其包装在DIV带有onpaste事件的元素中.我遇到的问题是,如果你点击日期输入并按CTRL+ V没有任何反应.但是,如果您先单击身体中的任何其他位置,然后单击日期输入并按CTRL+ V,它将起作用...

<div onpaste="alert('test')">
    <input type="date">
</div>
Run Code Online (Sandbox Code Playgroud)

演示:

https://jsfiddle.net/4qh31tn0/

编辑:好的,所以事实证明onpaste事件不必在DIV,它可以移动到INPUT元素,但问题仍然存在.如果我加载jsfiddle,单击输入并按CTRL+ V,没有任何反应.如果我INPUT事先单击元素之外的某个位置,然后单击输入并按CTRL+ V,它可以工作...

html javascript

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

为什么生成器比可迭代类慢得多?

我这里有两个 RNG 示例,它们通过池化结果来crypto.getRandomValues减少昂贵的系统调用的开销。基于类的方法基准测试为 378M ops/s,而生成器仅获得 56M ops/s。性能相差 6.75 倍。

class RandClass {
    #entropy; #index
    constructor(poolSize = 1024) {
        this.#entropy = new Uint32Array(poolSize)
        this.#index = 0
        crypto.getRandomValues(this.#entropy)
    }
    next() {
        const value = this.#entropy[this.#index++]
        if (this.#index === this.#entropy.length) {
            crypto.getRandomValues(this.#entropy)
            this.#index = 0
        }
        return { value, done: false }
    }
    [Symbol.iterator]() { return this }
}

const randClass = new RandClass()

function* RandGen(poolSize = 1024) {
    const entropy = new Uint32Array(poolSize)
    while (true) {
        crypto.getRandomValues(entropy)
        for (let i …
Run Code Online (Sandbox Code Playgroud)

javascript generator

9
推荐指数
0
解决办法
165
查看次数