小编Fab*_*ica的帖子

为什么我们需要捕获lambda中引用的引用?

考虑一下:

class TestLambda {
public:
    std::vector<char> data;
};

void test_lambda(TestLambda& obj) {
    [=]() mutable {
        obj.data.push_back(0x01);
    }();
}

int main() {
    TestLambda tst;
    tst.data.push_back(0x99);
    test_lambda(tst);

    // tst.data is unchanged at this point

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在调用test_lambda我所期望的是看到变化之后tst.data,但事实并非如此.要查看更改,我必须创建lambda再次传递一个引用obj,即.[&obj]().

我们为什么需要这个?我的意思是,再一次参考?

obj已经是一个参考.然后,通过复制lambda捕获obj.因此,obj在中lambda本身就不是一个参考?为什么?

有人能解释一下吗?谢谢.

c++ lambda pass-by-reference c++11

4
推荐指数
1
解决办法
211
查看次数

VSCode 放大 .png

有没有办法在 VSCode 中放大图像(特别是 .png)?我的存储库包含一些非常小的图像,我想在不打开其他应用程序的情况下查看它们。我认为 FontSize 快捷方式插件可能是一种解决方法,但不幸的是,这似乎不起作用。

zooming visual-studio-code

4
推荐指数
1
解决办法
3793
查看次数

为什么 const int x = 5; 不是C中的常量表达式吗?

本以为C不会再给我带来惊喜了,但这却让我大吃一惊。

    const int NUM_FOO = 5;
    ....

    int foo[NUM_FOO];
==>error C2057: expected constant expression
Run Code Online (Sandbox Code Playgroud)

我的 C++ 经验让我在内部#define尽可能地反对。所以这真是一个惊喜。VS2019,使用/TC编译。我认为 C99 无论如何都允许可变大小的数组。

  1. 任何人都可以解释为什么会发生拒绝,因为编译器在编译时肯定知道数组的大小?

  2. C99不是允许可变大小数组吗?

c constants c99 variable-length-array visual-studio-2019

4
推荐指数
1
解决办法
2636
查看次数

为什么这不会生成警告或错误

我有一个需要指针的函数,但我不小心将它声明为 const。该函数(故意)更改指针值 - 实际指针而不是指针指向的数据。

我想知道为什么这不会产生警告......

static void CalcCRC(const uint32_t *pData, uint8_t noWords)
{
    
    // Do some other stuff....

    pData = pData + noWords;

    // Do some other stuff....

}
Run Code Online (Sandbox Code Playgroud)

c pointers constants

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

如何调用与类成员同名的函数

如何从定义具有相同名称的成员函数的类中调用非成员函数listen()(包括在内sys/socket.h)listen()

#include <sys/socket.h>

void Socket::listen(int port)
{
    ...

    listen(sock_fd, 10); // this doesn't work
}
Run Code Online (Sandbox Code Playgroud)

c++ scope scope-resolution

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

删除前手动调用析构函数

auto obj = new Object;
obj->~Object();
delete obj;
Run Code Online (Sandbox Code Playgroud)

我知道这很不寻常,但它是否定义了行为?它会引起任何令人惊讶的问题吗?

c++ destructor undefined-behavior delete-operator

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

C++中的无符号整数

我写下面的代码:

 #include <iostream>
using namespace std;
int main() {

   unsigned int i=1;
   i=i-3;
   cout<<i;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是垃圾值,这是可以理解的.
现在我写下面的代码:

    #include <iostream>
    using namespace std;
    int main() {

    unsigned int i=1;
    i=i-3;
    i=i+5;
    cout<<i;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在输出是3.这里发生了什么?如何在这里添加垃圾值5?

c++ integer-overflow unsigned-integer

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

获取 std::vector 指针的更好方法

由于&v[0]v.data()提供了相同的方式来访问 的底层指针std::vector,我想知道哪种方法在稳定性和可移植性方面是更好的选择?

c++ stdvector

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

使用互斥锁在两个线程之间进行 C++ 同步而不使用条件变量

我有一个线程需要阻塞,直到另一个线程发生某些事情。这听起来很典型,我有这个解决方案。

//thread 1
mux.lock();
//send work to another thread
mux.lock(); //will likely block which I want

//thread 2
//get the work sent over from thread 1
//work on it, then
mux.unlock(); //unblock thread 1 - all good
Run Code Online (Sandbox Code Playgroud)

这似乎在 Linux 上运行良好,并且不需要条件变量 - 除了 C++ 标准说在同一线程中两次获取锁是未定义的行为 - 我在线程 1 中这样做。

c++ locking thread-synchronization stdmutex

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

为什么 C++17 引入了 std::aligned_alloc?

目的:了解 C++17 引入std::aligned_alloc动态内存管理的动机。

问题:对于 C++ 中的内存分配,std::malloc由于在什么情况下使用 malloc 和/或 new?. 相反,new在低级代码中几乎总是鼓励使用表达式(例如参见注释)。

尽管有这种气馁,我想知道为什么 C++17 引入了std::aligned_alloc它看起来像std::malloc.

C ++ 17(及更高版本)中是否有任何内容new(或其他鼓励使用的等效实用程序,如果有)无法执行?

尝试:我只能找到以下讨论,这仍然与我的问题有很大关系:

对齐 malloc 和标准 malloc 之间的区别?

c++ malloc memory-alignment c++17

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