小编Alw*_*ing的帖子

是最新标准中的命名模板参数还是在当代编译器中实现?

命名模板参数可以说是C++中非常重要的特性.即,给定具有许多具有默认参数的模板参数的类模板,此功能将允许用户为这些参数的任意子集提供参数.Vandervoorde和Josuttis撰写的"C++模板:完整指南"将整个第16.1节用于实现命名模板参数的效果.

同一本书的第13.9节命名模板参数列为可能添加到该语言的功能之一.鉴于此估计可以追溯到12年前,并且该功能具有很大的实用性,我想知道:将命名模板参数设置为最新标准和/或在现代编译器中实现吗?

如果第一个问题的答案是否定的,那么我想了解我所缺少的内容,即:为什么对此功能的需求并不像我认为的那么糟糕?

c++ templates generic-programming policy-based-design c++14

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

具有不同接口的策略类

假设一个具有策略的算法FooPolicy.实现此策略的策略类具有静态成员函数foo,但是,对于其中一些,foo采用int参数,而对于其他策略类则不会.我试图通过constexpr静态数据成员启用这些具有不同接口的策略类:

struct SimpleFoo {
    static constexpr bool paramFlag = false;
    static void foo() {
        std::cout << "In SimpleFoo" << std::endl;
    }
};

struct ParamFoo {
    static constexpr bool paramFlag = true;
    static void foo(int param) {
        std::cout << "In ParamFoo " << param << std::endl;
    }
};

template <typename FooPolicy>
struct Alg {
    void foo() {
        if (FooPolicy::paramFlag) FooPolicy::foo(5);
        else FooPolicy::foo();
    }
};

int main() {
    Alg<ParamFoo> alg;
    alg.foo();
    return …
Run Code Online (Sandbox Code Playgroud)

c++ policy-based-design c++11

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

为什么 Google Compute Engine 的计算优化 CPU 在 Python 中进行数字运算时比笔记本电脑慢

我在 Precision 5520 笔记本电脑和 Google Compute Engine 的 c2-standard-4 上运行以下代码:

import multiprocessing as mp
import time

def foo():
    before = time.time()
    sum = 0
    for i in range(1, 100000000):
        sum += i
    print(time.time() - before, sum)

for i in range(mp.cpu_count()):
    mp.Process(target=foo).start()
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,mp.cpu_count()都是 4。然而,出乎我意料的是,笔记本电脑上的每次计算需要 5.2 秒,而 GCE 上则需要 8.6 秒。

该笔记本电脑运行 Xeon E3-1505M v6 @ 3GHz。它是一个强大的 CPU,但我认为笔记本电脑的 CPU 无法与 Google HPC 服务器上的 CPU 相比(例如,由于热量限制)。

笔记本电脑上的Python版本是3.8.5。GCE 的 Python 版本为 3.9.2。

为什么会这样呢?

更新根据 @John Hanley 的回复,我更改了 Google Cloud Platform 的配置,因此每个核心仅使用一个 …

python performance google-cloud-platform python-multiprocessing

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

Python中块的概念

文档指出

Python 程序是由代码块构建的。块是作为一个单元执行的一段 Python 程序文本。以下是块:模块、函数体和类定义。

这似乎意味着,与我的想法相反,缩进的代码片段,例如 if 语句或 for 循环的主体不是block

我读得正确吗?作为一个单元执行意味着什么(例如为什么 for 循环不符合这个定义)?如果不是块,您将缩进的代码段称为什么?

python

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

理解可变捕获

如果我理解正确(我的源代码是C++ Primer的第395页,第5版),mutable则可以从中修改捕获的变量lambda.我不明白的两件事:

  1. 这与通过引用捕获有何不同?并且,如果通过引用捕获正在发生的事情,那么目的是mutable什么?只是一个语法糖?

  2. 是否mutable可以在每个变量的基础上应用更有帮助?

c++ lambda c++11

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

编译器可以通过直接初始化替换复制初始化吗

C++ Primer(第5版)在第499页说明允许编译器替换

string null_book = "9-999-9999-9"; // copy initialization
Run Code Online (Sandbox Code Playgroud)

对于

string null_book("9-999-9999-9"); // compiler omits the copy constructor
Run Code Online (Sandbox Code Playgroud)

另一方面,这篇文章表明(一般来说)这两种形式可以产生不同的结果.

如何协调C++ Primer中的语句与引用的帖子?

c++ copy-constructor

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

在WHERE子查询中看不到FROM子查询的原因是什么?

考虑:

SELECT DISTINCT student_id
FROM (SELECT  * FROM Grades WHERE dept_id = 'MT') T
WHERE grade = (SELECT MAX(grade) FROM T);
Run Code Online (Sandbox Code Playgroud)

Oracle抱怨T在WHERE中的子查询中没有现有的表.我知道我可以通过使用轻松解决这个问题WITH,但我仍然想了解.管理此案例的SQL规则是什么?该规则背后的逻辑是什么?

sql oracle

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

不包含数字5的数字

我正在尝试根据此回复使用否定的前瞻来匹配不包含数字5的匹配数字:

echo "aaa 123467890 3456 bbb" | egrep '[(?!5)[:digit:]]+'
Run Code Online (Sandbox Code Playgroud)

颜色输出显示第二个数字匹配。我该如何解决?

有什么办法egrep可以排除5在班上[:digit:]吗?(我进行了许多搜索,但最终没有找到任何东西)

regex grep

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

下标运算符优先级

下标运算符具有第二高的运算符优先级(请参阅下表)。但是,它的行为似乎具有较低的优先级。例如:

int arr[] = {10,20,30,40,50};
cout << arr[1+2];
Run Code Online (Sandbox Code Playgroud)

该代码输出40,这表明的结果+在应用下标运算符之前是可用的,这反过来表明它+的优先级高于下标运算符。我缺少什么,下标运算符的高优先级如何表现出来?

c++ operator-precedence

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

双循环变量上的相等条件:未指定还是未定义?

我想直接讲一下术语。考虑:

for (double d = 0.0; d != 1.0; d += 0.1)
    cout << d << " ";
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,由于双重运算不精确,因此此循环可以是有限的或无限的。是否认为这是未指定或未定义的行为?

c++ precision undefined-behavior unspecified-behavior

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