小编Krz*_*iak的帖子

是否有可能捕获lambda类型的异常?

虽然最好只抛出从std::exception类派生的类型的异常,但C++可以抛出任何东西.以下所有示例都是有效的C++:

throw "foo";  // throws an instance of const char*
throw 5;      // throws an instance of int

struct {} anon;
throw anon;   // throws an instance of not-named structure

throw []{};   // throws a lambda!
Run Code Online (Sandbox Code Playgroud)

最后一个例子很有趣,因为它可能允许传递一些代码在catch站点执行,而不必定义单独的类或函数.

但是有可能抓住一个lambda(或一个闭包)吗?catch ([]{} e)不起作用.

c++ lambda exception

55
推荐指数
3
解决办法
2753
查看次数

在单个存储库上工作的并发 git 进程

我正在为 git 编写一些工具(可以说它是另一个 GUI),并且我计划并行运行多个 git 命令(使用命令行客户端),因此多个进程可能随时访问存储库。

  1. 并行运行多个只读(例如 git log、git show、git status)命令可以吗?
  2. 它们真的会并发执行吗(即是否有内部锁序列化访问)?
  3. 如果执行了修改命令怎么办?它会被正确序列化吗?

git concurrency

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

git push 是原子的吗?

git push与几个提交一个原子操作?

  1. 关于git push同一分支的其他操作
  2. 关于git pull来自同一分支的操作

对于情况 1. 它必须是。否则我的提交会干扰其他人的提交,可能会造成不一致或无效的状态。Git 通过强迫我首先集成其他人的更改(如果我输掉比赛)或强迫其他人集成我的更改(如果我赢得比赛)来防止这种情况。

但是 2. 呢?如果我的存储库如下所示:

          C---D---E master
         /
    A---B origin/master
Run Code Online (Sandbox Code Playgroud)

有没有人git pull在我做的git push时候看到 A---B 或 A---B---C---D---E,或者他们也能得到介于两者之间的任何东西,例如 A--- B---C---D?

git git-pull git-push

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

将信号量添加到 C++20 的基本原理是什么,而它被认为对 C++11 来说太危险了?

我似乎记得不向 C++11 添加信号量的基本原理是它们太容易被错误使用,程序员最好使用互斥锁和条件变量。

如果是这样,最终将信号量添加到 C++20 的理由是什么?

c++ semaphore c++11 c++20

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

nargs > 1 的位置参数的元组元变量值

似乎将元组设置为metavar位置参数并请求帮助不起作用:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('size', type=int, nargs=2, help='size', metavar=('w', 'h'))

args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)

当调用 as 时,这会产生错误prog.py --help。该错误在 Python3 版本之间有所不同(我尝试了 3.5、3.6、3.8)并且包含ValueError: too many values to unpack (expected 1)TypeError: sequence item 0: expected str instance, tuple found请参阅 Wandbox 上的实例

对于可选参数,一切都很好:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--size', type=int, nargs=2, help='size', metavar=('w', 'h'))

args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)

Wandbox 上的实例

我的代码是否无效,或者我是否在 Python 实现中发现了错误?

请注意,简单地解析参数就可以按预期工作。

python argparse python-3.x

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

Git:如何变基到过去的特定提交?

我想变基到一个特定的提交,该提交不是另一个分支的 HEAD,而是向后移动:

A --- B --- C          master
            \
             \-- D --- E   topic
Run Code Online (Sandbox Code Playgroud)

A --- B --- C          master
      \
       \-- D --- E   topic
Run Code Online (Sandbox Code Playgroud)

我如何以优雅且通用的方式实现这一目标?

一般来说,我的意思是目标提交(B)不一定是 HEAD 的直接祖先(我也可能变基到 A 或先前的提交),并且主题分支上可能不止两个提交。我可能还想从 B 变基到 A。

git version-control git-rebase

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

我应该明确地与 None 进行比较吗

我有一个相对简单的Python代码:

import threading

class Foo():
    def __init__(self):
        self._thread = None

    def start(self):
        self._thread = threading.Thread(...)

    def stop(self):
        if self._thread:
            ...
Run Code Online (Sandbox Code Playgroud)

一位同事建议我应该Nonestop函数中显式地进行比较:if self._thread is not None:

我不确定哪个版本更Pythonic:隐式检查还是显式检查?另外,如果我使用任何其他类型(除了集合之外,在布尔上下文测试中评估是否为空)我应该None显式比较吗?

python nonetype

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

如何让编译器选择非成员函数重载

我正在编写一个库,它对内置类型(int、float、double 等)和用户提供的类型执行一些操作。其中之一是由模板函数执行的:

namespace lib
{
template<typename T>
inline auto from_string(std::string const & s, T & t) -> bool
{
    std::istringstream iss(s);
    iss >> t;
    return !iss.fail();
}
}
Run Code Online (Sandbox Code Playgroud)

这是一个定制点 - 用户可以根据自己的类型重载此函数:

namespace foo
{
class UserType
{
    // (...)
};
}

namespace lib
{
inline auto from_string(std::string const & s, foo::UserType & ut) -> bool
{
    // some implementation
}
}
Run Code Online (Sandbox Code Playgroud)

或者将from_string函数放在同一命名空间中并通过 ADL 访问:

namespace foo
{
inline auto from_string(std:string const & s, UserType & ut) -> bool …
Run Code Online (Sandbox Code Playgroud)

c++ overload-resolution c++17

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

如何在递归初始化子模块时切换到另一个分支

我有一个包含几个子模块的 git 存储库(请参阅示例)。它的结构如下所示:

I--A--B <- main
       \
        C <- branch-c
Run Code Online (Sandbox Code Playgroud)
  • 提交 A 添加了一个submodule-a
  • 提交 B 添加了一个submodule-b
  • 提交 C 添加一个submodule-con 分支branch-c

git clone --recurse-submodules <URL>当我仅使用submodule-a和子模块克隆上述存储库时, 子submodule-b模块将被初始化并克隆。

branch-c当我想使用来检查分支时git checkout branch-c,会创建 的目录submodule-c,但子模块本身并未初始化。命令输出中没有指示需要执行一些额外步骤。既不git status给出git diff任何提示。

相反,当我想branch-c使用它进行检查时git checkout --recurse-submodules branch-c,出现错误:

fatal: not a git repository: ../../.git/modules/subrepos/subrepo-c
fatal: could not reset submodule index
Run Code Online (Sandbox Code Playgroud)

如何branch-c在自动初始化所​​有子模块的同时签出(或切换到)分支?

git git-checkout git-submodules

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