小编Lor*_*ins的帖子

新的 emplace_back 签名

签名的的emplace_back方法std::vector已经更新到返回引用:

template< class... Args >
constexpr reference emplace_back( Args&&... args );
Run Code Online (Sandbox Code Playgroud)

虽然我可以找到许多(较旧的)帖子,说明为什么不需要这样做,甚至是糟糕的设计,但我找不到有关更改理由的来源。

  • 为什么会发生此更新?如果明显的“提供更易于使用的干扰”成立,为什么不push_back得到更新?
  • 它不会通过使接口复杂化而使异常安全要求复杂化吗?

我也在寻找介绍更改的论文,如果您能指点我,将不胜感激。

c++ c++-standard-library language-lawyer

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

uWebSockets 客户端

我主要使用 C++,想要为项目实现服务器-客户端通信。虽然不太精通分布式计算,但我尝试过各种工具组合,例如 SocketIO 服务器(JS 中)+ C++ 客户端库或 IXWebSocket。我也不想在 Boost.Asio 中从头开始实现所有内容。

据我所知,uWebSockets是 C++ 中性能最高且符合标准的解决方案。问题是只有一个服务器库可用。我知道“任何”兼容的 Web 套接字实现都能够与 uWebSockets 服务器一起使用,但是:

  • 有规范的方法吗?在这种情况下,人们作为客户端使用什么?我看到该仓库有大约 12k 颗星,所以这一定非常简单。我再次想使用C++ 客户端,而不是 JS 中的浏览器实现。
  • 如果定制解决方案合适,我应该如何去做?

c++ client-server uwebsockets

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

该变量将如何初始化?

我有以下内容

char mem_pool[1024*1024*64]; 

int main() {
    // ... 
}
Run Code Online (Sandbox Code Playgroud)

我试图彻底了解如何mem_pool初始化.经过大量的搜索,我的结论是:

  • 它是一个静态初始化(不是在static关键字中,而是在"在程序之前运行 - 在静态初始化阶段")
  • 它将分两个阶段运行:零初始化和默认初始化(第二阶段不会做任何事情)
  • 它是一个POD数组,因此应该应用每个元素的默认初始化,但由于前两个点,我们将不会有一个不确定值的数组(就像我们char ar[N]在函数作用域中所做的那样),而是一个零数组.

有人可以帮助我消除语言所保证的内容,如果我错了,还要纠正我吗?

我还想过做以下任何事情

char mem_pool[1024*1024*64] {}; 
char mem_pool[1024*1024*64] = ""; 
Run Code Online (Sandbox Code Playgroud)

我怀疑这是一个更好/推荐的做法,但现在我需要了解我的初步问题.

c++ language-lawyer

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

如何在 Markdown 中创建具有更大字体的列表

我在 jupyter 中使用 Markdown,所以我以通常的方式创建项目符号列表:

- 项目 1

- 项目 2

显示为:

  • 项目 1
  • 项目 2

现在说我希望列表的字体更大,例如像标题 2 ( ##)提供的字体,有没有办法做到这一点?我试过的

# - 项目 1

# - 项目 2

失败并仅显示为标题文本而不是更大的列表:

- 项目 1

- 项目 2

markdown ipython-notebook jupyter jupyter-notebook

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

C++ 中的标准或惯用空对象

我经常需要在 C++ 中定义一个空对象,它通常是一个没有任何成员或方法的结构:

struct Dummy {};
Run Code Online (Sandbox Code Playgroud)

同样的想法的化身包括类喜欢nill_tnull_tEmptyNone等。

我想知道是否有符合此描述标准库对象(空类,用作“无”或“空”的标记)或定义它的规范方式(专有名称等)。一个想法是使用,std::false_type但不幸的是这个类远非空的。


编辑

理想情况下,我会使用 Standard None 类型作为(n 空)基础来拥有丰富的名称描述和隐藏实现(或按原样使用,在有意义的地方)

struct Dummy : std::none {};
struct Noop  : std::none {};
Run Code Online (Sandbox Code Playgroud)

让语言处理复杂的“无”,就像@Barry 在他的回答中提到的那样,或者例如提供一个总是返回的相等运算符false(如 NaN)或任何语言认为“无”的“正确行为”都会很好.

问题只是询问是否有标准的 None 或 Empty 或 Nothing 类型,我从不建议通过在没有意义的地方使用它来混淆代码。

c++ c++20

5
推荐指数
2
解决办法
166
查看次数

如何在远程机器中生成 docker 容器

是否可以使用适用于 Python 的 docker SDK在远程计算机中启动容器?

import docker
client = docker.from_env()

client.containers.run("bfirsh/reticulate-splines", detach=True)
# I'd like to run this container ^^^ in a machine that I have ssh access to.
Run Code Online (Sandbox Code Playgroud)

通过查看文档,这种类型的管理似乎超出了上述 SDK 的范围,因此在网上搜索时我得到提示,Python 的 kubernetes 客户端可能会有所帮助,但不知道从哪里开始。

python docker

5
推荐指数
2
解决办法
1791
查看次数

关于noexcept参数

noexcept对我来说,使用非常清楚,因为现代优化的标记函数的方式是无抛出异常保证

struct A {
    A() noexcept; 
}; 
Run Code Online (Sandbox Code Playgroud)

有效的现代c ++的第14项中,我发现了以下语法,称为有条件的noexcept

template<class T, size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b))); 
Run Code Online (Sandbox Code Playgroud)

我得到它的方式是,它noexcept可以引入一个真值上下文,但是又如何另一个noexcept是一个参数?

有人可以详细说明这种用法的语法和语义noexcept吗?

c++ c++11 c++14

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

使用开始时可用的所有数据构建大型(ish)无序集

我有一种情况需要优化无序集的创建。预期的元素数量约为 5-25M。我的第一个想法是我应该事先准备好所有数据并做一些类似的事情

unordered_set s(data); 
Run Code Online (Sandbox Code Playgroud)

代替

for (auto& elem : data)
    s.insert(elem); 
Run Code Online (Sandbox Code Playgroud)

STL 无序集能否使用批量加载方法并加快其创建速度?如果我在构建表之前知道预期的元素数量,我该如何调整哈希表的参数(存储桶大小等)?

c++ unordered-set c++-standard-library

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

将 const 添加到指针类型

假设我有一个类模板:

template <class T>
struct A
{
  T value;

  void foo(auto fun) { 
    fun(value);
    // ^^^^^^^ Pass value as a const object
  }
};
Run Code Online (Sandbox Code Playgroud)

我想常量添加到value,打电话时fun 这样只有接受功能 TT const&T const*可调用。我最初的方法是创建foo一个 const 成员函数,但是对于引用和指针成员来说这失败了,因为 const 成员函数可以修改它们(你只是不能对这些成员进行变基)。

我也尝试使用std::add_const并将std::as_const值传递给参数函数 ( fun) 但这会进行如下转换:

T = MyData*                  // say T is the type "Pointer to MyData"
add_const<T> = MyData *const // constness is added to the pointer, 
                             // i.e. it becomes constant …
Run Code Online (Sandbox Code Playgroud)

c++ templates constants const-correctness type-traits

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

如何转发可变 lambda

这是我尝试编译的代码的简化示例:

#include <iostream>
#include <functional>

template <class F>
auto foo(F&& fun)
{
    return [callback = std::forward<F>(fun)](auto&&... args) {
        std::invoke(callback, std::forward<decltype(args)>(args)...);
    };
}

int main()
{
    std::string cur("running"), target("ok");
    
    foo([s1 = cur, s2 = target](std::string const& arg) /*mutable*/ {
        if (s1 == arg)
        {
            std::cout << s1 << std::endl;
        }
    })("not ok");
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

简而言之,我有一个foo接受可调用对象的函数,并且应该从它们构建一个新的可调用对象。为了举例,上面我只是调用参数fun,但在实际情况中,对可调用对象进行了一些修饰,并将结果放入在某些条件下调用此类“操作”的数据结构中。

这个例子编译并运行得很好。当尝试将可变 lambda 传递给foo. 当我取消注释mutable上面的关键字时,出现以下编译错误:

main.cpp: In instantiation of 'foo<main()::<lambda(const string&)> >(main()::<lambda(const string&)>&&)::<lambda(auto:1&& ...)> [with …
Run Code Online (Sandbox Code Playgroud)

c++ lambda template-meta-programming

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