小编yng*_*ccc的帖子

std :: function和std :: packaged_task转换

我想移动std::packaged_taskstd::vectorstd::function<void()>,因为std::packaged_task已经void operator()( ArgTypes... args )过载,它应该是可转换到std::function<void()>,是吗?

这不能在MSVC和Clang上编译,MSVC抱怨无法将void转换为int,clang抱怨删除了复制构造函数std::packaged_task,不应该移动版本在std::vector::push_back这里调用?发生了什么,这是一个错误吗?

int main () 
{
    std::vector<std::function<void()>> vec;
    std::packaged_task<int()> task( [] { return 100; } );
    vec.push_back( std::move(task) );
}
Run Code Online (Sandbox Code Playgroud)

这是clang的神秘模板错误消息

In file included from main.cpp:1:
In file included from /usr/bin/../lib/c++/v1/iostream:38:
In file included from /usr/bin/../lib/c++/v1/ios:216:
In file included from /usr/bin/../lib/c++/v1/__locale:15:
In file included from /usr/bin/../lib/c++/v1/string:434:
In file included from /usr/bin/../lib/c++/v1/algorithm:594:
/usr/bin/../lib/c++/v1/memory:2236:15: error: call to deleted constructor of
      'std::__1::packaged_task<int ()>' …
Run Code Online (Sandbox Code Playgroud)

c++ clang c++11

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

部分聚合初始化和非静态数据成员初始化程序

struct Point {
  int x = 0;
  int y = 10;
};

Point p = {1,};
p.x == 1;  // true
p.y == 10; // is this true?
Run Code Online (Sandbox Code Playgroud)

根据初始化列表中的标准缺失元素是值初始化,所以y应该是int()或者0,但它似乎并没有说明在非静态数据成员初始化器的情况下发生了什么.

编辑:根据答案,显然这是无效的c ++ 11,我想知道c ++ 1y中的情况.

c++ c++11 c++14

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

如何在powershell中修改GOPATH

我正在尝试将我的项目目录添加到GOPATH,在linux中我能做到

export GOPATH=$HOME/mygo 在〜/ .bashrc中

powershell中的等价物是什么

powershell go

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

移动语义和结构

我有一个功能

struct foo {
    std::vector<int> v;
};

foo func();
Run Code Online (Sandbox Code Playgroud)

从函数返回时,foo中的向量是否会被移动或复制?

c++ c++11

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

函数静态变量析构函数和线程

我有一个简单的程序.

int main() 
{
    std::atomic<bool> b = true;
    ConcurrentQueue<std::string> queue;

    std::thread thread( [&]{
        while ( b ) {
            auto str = queue.wait_and_pop();
            std::cout << *str;
        }
    });

    b = false;
    queue.push( "end" );
    thread.join();
}
Run Code Online (Sandbox Code Playgroud)

ConcurrentQueue<T>是我自己的线程安全队列的实现,wait_and_pop是一个使用的阻塞操作std::condition_variable.

这个程序成功打印"结束"并退出,这里没问题.(有一个错误b的时候是假的thread开始,其原因就立即退出,但这里不相关)

但是,如果我将所有这些包装在一个类中

class object {
public:
    object() {
        b = true;

        thread = std::thread( [this]{
            while ( b ) {
                auto str = queue.wait_and_pop();
                std::cout << *str;
            }
        });
    }

    ~object() {
        b = false; …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading visual-c++ c++11

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

strcat目标数组的大小

参加以下计划:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char a[8] = "Hello, ";
    char b[7] = "world!";

    strcat(a, b);

    cout << a;

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

请注意,a并且b其大小与指定的字符串相同.

文件规定,对于strcat(a, b)工作,a需要足够大,以包含串联的结果字符串.

不过,cout << a显示"Hello, world!".我进入未定义的行为吗?

c c++ strcat

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

从没有for循环的其他程序流stdout

我有一个程序,编译和运行另一个程序并将stdout传递给自己进行打印,因为该程序没有终止所以我需要流式传输它的stdout

// boilerplate ommited

func stream(stdoutPipe io.ReadCloser) {
    buffer := make([]byte, 100, 1000)
    for ;; {
        n, err := stdoutPipe.Read(buffer)
        if err == io.EOF {
            stdoutPipe.Close()
            break
        }
        buffer = buffer[0:n]
        os.Stdout.Write(buffer)
    }
}

func main() {
    command := exec.Command("go", "run", "my-program.go")
    stdoutPipe, _ := command.StdoutPipe()

    _ = command.Start()

    go stream(stdoutPipe)

    do_my_own_thing()

    command.Wait()
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是如果不用for循环重复检查我该怎么做呢,是否有一个库函数做同样的事情?

go

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

标签 统计

c++ ×5

c++11 ×4

go ×2

c ×1

c++14 ×1

clang ×1

multithreading ×1

powershell ×1

strcat ×1

visual-c++ ×1