在cplusplus.com上,我看到的是数据类型 atomic_int_fastN_t ,atomic_int_leastN_t其中N可以是8,16,32和64。那么,最小和快速单词在它们中的含义是什么?或它们之间的区别是什么?即atomic_int_fast64_t与at atomic_int_least64_t和atomic<int64_t>有何区别?
我有一个枚举,但我希望有一个赋值运算符,以便能够分配一个不是原始枚举的类型.例如
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.有没有办法做到这一点?
MoveInsertable和CopyInsertable之间的区别?建议如果分配器可以从相同类型的右值构造类型的对象,则该类型T为MoveInsertableT。但是,MoveConstructible也需要T可从相同类型的右值构造。那么,它们之间有什么区别?
假设程序启动时我有一个静态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)
或者,还有更好的方法?
我运行了以下代码
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.0g++ --version:g++10.2.0为什么 sort 不是成员?advance我正在使用 VScode intellisense,它显示了、begin、等方法common_view。但不排序。
#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 …
我写了以下惊天动地的应用程序:
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++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) 在下面的代码片段中,我使用了可变参数模板 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) 我的问题类似于如何在 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),这是必需的。请升级您的编译器