小编Ada*_*dam的帖子

关于静态模板化 constexpr 的 Clang 警告(未定义内联函数)

我有以下 C++ 代码:

#include <array>
#include <iostream>

typedef unsigned char uchar;

class A {
public:
    template <size_t N, uchar value>
    static inline constexpr std::array<uchar, N> filledArray() {
        std::array<uchar,N> ret{};
        ret.fill(value);
        return ret;
    }

    std::array<uchar, 5> upper = A::filledArray<5, 'A'>();
};

int main() {
    A blah;
    for (int i = 0; i < 5; ++i)
        std::cout << blah.upper[i] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

g++ 编译它时没有警告,并且输出为 As,正如预期的那样。但 clang++-4.0 产生:

clang++-4.0 -std=c++14 main.cpp -o clangOut
main.cpp:9:47: warning: inline function 'A::filledArray<5, 'A'>' is not …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang

6
推荐指数
1
解决办法
2375
查看次数

WebGL2 和 WebGPU 之间的互操作

我的问题很简短:是否可以读取由 WebGL2 中的 WebGPU 创建的纹理或帧缓冲区?如果可以,如何读取?

我用谷歌搜索,我发现的唯一的就是这个错误:https://bugs.chromium.org/p/chromium/issues/detail? id=1200466,但我不能说,我完全理解它,或者文档在哪里。

总体目标是在 WebGPU 中创建渲染引擎,将其复制到 WebGL 纹理,并在为 WebAssembly 编译的 QML 应用程序中使用它。QML 尚不支持 WebGPU,目前还不清楚何时支持。

webgl webgpu

6
推荐指数
1
解决办法
130
查看次数

为什么 sin 在 WebAssembly 中比在 Java 脚本中慢?

我有一些非常简单的基准测试,通过 Catch2 运行,并使用 -O3 进行编译emscripten 3.1.37

    BENCHMARK("cpp sin only")
    {
        double sum = 1.0;
        for (int t = 0; t < 2000000; ++t) {
            sum += sin(double(t));
        }
        return sum;
    };

#ifdef __EMSCRIPTEN__
    BENCHMARK("js sin only")
    {
        EM_ASM_DOUBLE({
            let sum = 1;
            for (let i = 0; i < 2000000; i++) {
                sum = sum + Math.sin(i);
            }
            return sum;
        });
    };
#endif
Run Code Online (Sandbox Code Playgroud)

我预计 JavaScript 和 WebAssembly 之间不会有太大差异,但有:

chrome:
benchmark name                       samples       iterations    est run time
                                     mean          low …
Run Code Online (Sandbox Code Playgroud)

webassembly

6
推荐指数
0
解决办法
86
查看次数

有符号和无符号整数表达式与0x80000000之间的比较

我有以下代码:

#include <iostream>

using namespace std;

int main()
{
    int a = 0x80000000;
    if(a == 0x80000000)
        a = 42;
    cout << "Hello World! :: " << a << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

Hello World! :: 42
Run Code Online (Sandbox Code Playgroud)

所以比较有效.但是编译器告诉我

g++ -c -pipe -g -Wall -W -fPIE  -I../untitled -I. -I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++ -o main.o ../untitled/main.cpp
../untitled/main.cpp: In function 'int main()':
../untitled/main.cpp:8:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(a == 0x80000000)
             ^
Run Code Online (Sandbox Code Playgroud)

所以问题是:为什么0x80000000是unsigned int?我可以以某种方式签名以摆脱警告吗?

据我所知,0x80000000将是INT_MIN,因为它超出正整数的范围.但为什么编译器会假设我想要一个正数?

我正在使用linux上的gcc版本4.8.1 20130909进行编译.

c++

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

标签 统计

c++ ×2

clang ×1

gcc ×1

webassembly ×1

webgl ×1

webgpu ×1