小编Art*_*ash的帖子

为什么remove_reference在函数上不起作用?

前几天进行一些模板元编程时遇到了奇怪的事情。基本上可以归结为这个断言没有(正如我期望的那样)通过。

static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
Run Code Online (Sandbox Code Playgroud)

起初我以为我在定义函数引用时犯了语法错误,但是这个断言通过了,表明事实并非如此。

static_assert(std::is_same_v<void()&, void()&>);
Run Code Online (Sandbox Code Playgroud)

我还尝试实现remove_reference自己从cppreference复制源,但这也不起作用。这里发生了什么?

c++ templates types c++17

35
推荐指数
2
解决办法
817
查看次数

将const函数引用绑定到lambda

这段代码

int(&foo)(int, int) = [](int a, int b) { return a + b; };
Run Code Online (Sandbox Code Playgroud)

不会编译,因为显然不能使用临时初始化非常量引用。我在哪里放const

c++ lambda c++11

17
推荐指数
2
解决办法
814
查看次数

什么是gcc在这里每个线程运行一次这个代码?

我刚刚遇到这种技术,每个线程运行一次代码.我不知道它是如何在最低级别工作的.特别是,fs指向什么?什么.zero 8意思?标识符是否有原因@tpoff

int foo();

void bar()
{
    thread_local static auto _ = foo();
}
Run Code Online (Sandbox Code Playgroud)

输出(带-O2):

bar():
        cmp     BYTE PTR fs:guard variable for bar()::_@tpoff, 0
        je      .L8
        ret
.L8:
        sub     rsp, 8
        call    foo()
        mov     BYTE PTR fs:guard variable for bar()::_@tpoff, 1
        add     rsp, 8
        ret
guard variable for bar()::_:
        .zero   8
Run Code Online (Sandbox Code Playgroud)

c++ assembly multithreading gcc thread-local-storage

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

无法使用Web Audio API与iOS 11 Safari配合使用

所以iOS 11 Safari应该添加对Web Audio API的支持,但它似乎仍然不适用于这个javascript代码:

//called on page load
get_user_media = get_user_media || navigator.webkitGetUserMedia;  
get_user_media = get_user_media || navigator.mozGetUserMedia;
get_user_media.call(navigator, { "audio": true }, use_stream, function () { });
function use_stream(stream){
    var audio_context = new AudioContext();
    var microphone = audio_context.createMediaStreamSource(stream);
    window.source = microphone; // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=934512
    var script_processor = audio_context.createScriptProcessor(1024, 1, 1);
    script_processor.connect(audio_context.destination);
    microphone.connect(script_processor);
    //do more stuff which involves processing the data from user's microphone...
}
Run Code Online (Sandbox Code Playgroud)

我复制粘贴了大部分代码,所以我只是粗略地了解它.我知道它应该(并且在其他浏览器上)捕获用户的麦克风以进行进一步处理.我知道代码var audio_context = new AudioContext();在行上断开(如在运行之后没有代码),但没有任何错误消息因为我没有调试iOS Safari所需的mac(苹果已经死> _ <)任何人都知道发生了什么和/或如何解决它?

e:忘了提一下我查了一下,显然我在Safari中使用Web Audio API之前需要关键字"webkit",但是它 …

javascript safari ios

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

是否可以保证在std :: string之前初始化指向字符串文字的指针?

//file1.cpp
extern const char* foo;
std::string bar = foo;

//file2.cpp
const char* foo = "foo";
Run Code Online (Sandbox Code Playgroud)

标准保证将bar初始化为"foo"吗?还是可以foo在构造函数中进行设置和段错误之前对其进行初始化,例如SIOF?

c++ static-initialization language-lawyer

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

"这个"不是一个对象吗?

刚在接受采访时被问到这个问题:这个功能能不能归还'对象'吗?

function foo() { return typeof this; }
Run Code Online (Sandbox Code Playgroud)

我说的我不确定但猜到了

foo.bind(undefined)()
Run Code Online (Sandbox Code Playgroud)

可能会回来'undefined'.但是在我的控制台中在家测试它是行不通的.

javascript

3
推荐指数
1
解决办法
69
查看次数