小编cpp*_*ner的帖子

类型atomic_int_fastN_t和atomic_int_leastN_t有什么区别

cplusplus.com上,我看到的是数据类型 atomic_int_fastN_tatomic_int_leastN_t其中N可以是8,16,32和64。那么,最小和快速单词在它们中的含义是什么?或它们之间的区别是什么?即atomic_int_fast64_t与at atomic_int_least64_tatomic<int64_t>有何区别?

c++ c++11

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

有没有办法让运算符=枚举?

我有一个枚举,但我希望有一个赋值运算符,以便能够分配一个不是原始枚举的类型.例如

enum class X : int
{
  A, B, C, D
}

enum class Y : char
{
  A, B, C, D
}

Y& operator=(Y& lhs, X rhs)
{
  return Y = static_cast<Y>(X);
}
Run Code Online (Sandbox Code Playgroud)

但我得到了一个'operator =' must be a non-static member.有没有办法做到这一点?

c++ enums operator-overloading assignment-operator c++11

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

MoveInsertable和MoveConstructible有什么区别?

MoveInsertable和CopyInsertable之间的区别?建议如果分配器可以从相同类型的右值构造类型的对象,则该类型TMoveInsertableT。但是,MoveConstructible也需要T可从相同类型的右值构造。那么,它们之间有什么区别?

c++ c++11

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

每次都可以实例化一个新的 random_distribution 吗?

假设程序启动时我有一个静态std::default_random_engine种子std::random_device

现在我想使用该随机引擎生成随机数,所以我这样做:

std::uniform_int_distribution<std::default_random_engine::result_type> dist{min, max};

创建一个分布。这种分布有一个固定的范围。我无法改变范围说[min2, max2]..所以我创建了一个新的发行版。

可以继续创建这些对象吗?例如:

int generate_random(int min, int max)
{
    //creates a new distribution every time..
    std::uniform_int_distribution<std::default_random_engine::result_type> dist(min, max);
    return dist(engine);
};
Run Code Online (Sandbox Code Playgroud)

或者,还有更好的方法?

c++ c++17

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

错误:“排序”不是“std::ranges”的成员;您的意思是“std::sort”吗?

我运行了以下代码

vector<int> randomIntegers = generateIntegers(10); // Generates 10 integers

std::ranges::sort(randomIntegers);
Run Code Online (Sandbox Code Playgroud)

当我用 编译时g++ -std=c++20 file.cpp,我得到

error: 'sort' is not a member of 'std::ranges'; did you mean 'std::sort'?
Run Code Online (Sandbox Code Playgroud)
  • gcc --version:海湾合作委员会10.2.0
  • g++ --version:g++10.2.0

为什么 sort 不是成员?advance我正在使用 VScode intellisense,它显示了、begin、等方法common_view。但不排序。

c++ c++20 std-ranges g++10

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

c++ 11 线程在 Linux 和 Windows 上的不同行为

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mx;
void some_function()
{
    while(1)
    {
        std::lock_guard<std::mutex> mx_guard(mx);
        std::cout << "some_function()\n";
    }
}

void some_other_function()
{
    while(1)
    {
        std::lock_guard<std::mutex> mx_guard(mx);
        std::cout << "some_other_function\n";
    }
}

int main()
{
    std::thread t1(some_function);
    std::thread t2 = std::move(t1); //t2 will be joined

    t1 = std::thread(some_other_function);

    if(t2.joinable())
    {
        std::cout << "t2 is joinable()\n";
        t2.join(); //calling join for t1
    }
    if(t1.joinable())
    {
        std::cout << "t1 is joinable()\n";
        t1.join();
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在 Windows 和 Linux 上这个程序有不同的输出。在使用 Visual Studio …

c++ linux windows multithreading c++11

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

模板化类中模板化方法的“模糊新声明”错误

我写了以下惊天动地的应用程序:

class SomeA { }; class SomeB { }; class SomeC { };

template <typename A, typename B, typename... Cs>
class Foo {
public:
    template <typename U> static void bar();
};

template <typename U>
void Foo<SomeA, SomeB, SomeC>::bar() { };

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

当我编译这个(gcc 4.9.3 with -std=c++11)时,出现以下错误:

a.cpp:10:36: error: ambiguating new declaration of ‘static void Foo<SomeA, SomeB, SomeC>::bar()’
 void Foo<SomeA, SomeB, SomeC>::bar() { };
                                    ^
a.cpp:6:36: note: old declaration ‘static void Foo<A, B, Cs>::bar() [with U …
Run Code Online (Sandbox Code Playgroud)

c++ templates ambiguity template-specialization c++11

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

C++20 范围和 std::views::take 错误

我正在试验 C++20 范围,并且在使用 GCC 11.1.0 和 CMake 3.20.3 进行编译时出现了以下奇怪的行为。具体来说,以下代码无法编译:

auto Foo() {
    std::vector<long int> x{1, 2, 3, 4, 5, 6};
    return std::views::all(x) | std::views::take(x.size());
    // return std::views::all(x) | std::views::take(static_cast<int>(x.size()));
}
Run Code Online (Sandbox Code Playgroud)

导致非常长的错误消息,例如

[...] error: no match for ‘operator|’ (operand types are ‘std::ranges::ref_view<std::vector<long int> >’ and ‘std::ranges::views::__adaptor::_Partial<std::ranges::views::_Take, long unsigned int>’)
[build]   230 |     return std::views::all(x) | std::views::take(x.size());
[build]       |            ~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
[build]       |                           |                     |
[build]       |                           |                     std::ranges::views::__adaptor::_Partial<std::ranges::views::_Take, long unsigned int>
[build]       |                           std::ranges::ref_view<std::vector<long int> >
Run Code Online (Sandbox Code Playgroud)

[build] /usr/include/c++/11/ranges:739:13:   required …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang c++20 std-ranges

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

我们如何使用概念确保可变参数模板的返回类型和参数类型相同?

在下面的代码片段中,我使用了可变参数模板 findSum 函数,并确保该函数的参数类型使用概念相同,但有人可以建议我如何确保该函数的返回类型也与参数类型匹配。

#include <iostream>
#include <concepts>
template<typename F,typename... R>
struct FirstVariadicType
{
    using Type = F;
};

template<typename... Ts>
requires requires(Ts... args){
std::conjunction_v<std::is_same<typename FirstVariadicType<Ts...>::Type, Ts>...>;
}
auto findSum(Ts... args)
{
     return (... + args);
}
int main()
{
    std::cout<<"sum of 2 and 3 is "<<findSum(2,3)<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic c++-concepts c++20

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

如何在 RHEL 7.4 上安装 C++14

我的问题类似于如何在 RHEL 7.4 上安装 gcc 4.9.2

但是我正在尝试在 Red Hat 7 上获得 C++14 支持,以便我可以安装 mapnik。

我试过了: # yum-config-manager --enable rhel-server-rhscl-7-rpms

安装 gcc,g++ 4.9.2 版: # yum install devtoolset-3-gcc-c++

启用 gcc-4.9, g++-4.9 : $ scl enable devtoolset-3 bash

但我不断得到

C++ 编译器不支持 C++14 标准(-std=c++14),这是必需的。请升级您的编译器

c++ c++14 rhel7

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