小编deb*_*g18的帖子

为什么sqrt在我的计算机上没有-O2 in g ++的情况下变得更快?

请考虑以下代码:

#include <cstdio>
#include <cmath>

const int COUNT = 1000000000;

int main()
{
    double sum = 0;
    for (int i = 1; i <= COUNT; ++i) {
        sum += sqrt(i);
    }
    printf("%f\n", sum);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有-O2,它在我的计算机上只运行2.9秒,而运行6.4秒-O2.

我的电脑是Fedora 23,带有g ++ 5.3.1.

我在Ubuntu 14.04(使用g ++ 4.8)上尝试了相同的东西,它没有问题(所有6.4s).

c++ performance g++ sqrt

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

是否可以在没有显式特化的情况下调用可变参数模板函数?

我试图编写一个函数来转发可变参数模板函数的参数,类似于std::invoke.这是代码:

#include <functional>

template<class... Args>
void f(Args&&... args) { }

template<template<class...> class F, class... Args>
void invoke(F<Args...> f, Args&&... args) {
    f(std::forward<decltype(args)>(args)...);
}

int main() {
    invoke(f, 1, 2, 3);
    std::invoke(f, 1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)

但是,我invokestd::invoke编译都失败了.g ++抱怨它无法推断出模板参数template<class ...> class F.那么是否可以在没有显式模板特化的情况下调用可变参数模板函数?

c++ templates variadic-templates c++17

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

标签 统计

c++ ×2

c++17 ×1

g++ ×1

performance ×1

sqrt ×1

templates ×1

variadic-templates ×1