c++11 相关问题

将此标记用于必须编译为C ++ 11的代码(不使用C ++ 14或更高版本中引入的任何功能)。

使用 std::atomic<uint8_t>

我正在尝试在结构中使用 std::atomic,期望涉及在多线程环境中存储和加载值的操作将是线程安全的。

回答 1 投票 0

C++线程同步和缓存一致性

我正在阅读有关线程同步的内容,并开始了解好像https://en.cppreference.com/w/cpp/language/as_if。 我的问题是编译器可以重新排列/优化下面的代码...

回答 1 投票 0

我使用c++时关于devc++调试的问题

我是C++初学者。我不知道如何在 devc++ 上调试向量,我使用以下方法尝试找出 arr 中的值,但失败了。 这是我的代码 #包括 #包括...

回答 1 投票 0

在继承类中重新定义交换函数?

嘿,我刚刚在我的班级中实现了三巨头加上复制和交换习语赋值运算符。 但是,我有一些其他类继承了这个超类,现在我问自己是否应该

回答 1 投票 0

为什么使用 is_const 类型特征不将 const 引用视为 const ? [重复]

我很惊讶下面的代码: #包括 #包括 使用命名空间 std; int main(int argc, char* argv[]) { 计算<< boolalpha <<

回答 1 投票 0

C++11 反向基于范围的 for 循环

是否有一个容器适配器可以反转迭代器的方向,以便我可以使用基于范围的 for 循环反向迭代容器? 使用显式迭代器我会转换它: 对于(

回答 11 投票 0

std::this_thread::sleep_for 实现取决于系统时钟

我遇到的问题是 std::this_thread::sleep_for 实际上使用系统时钟来计算唤醒时间(至少在 Windows 上),而不是稳定时钟。当系统

回答 1 投票 0

从C++文本文件中读取复数(a+bi)

我想读取一个复数数组(a+bi 形式)。我在互联网上找到了一些建议,但是这些方法只能得出实部,而虚部始终......

回答 5 投票 0

如何在编译时获取数组大小?

定义 C 样式数组或 C++11 数组时,通常需要获取一个编译时常量来表示此类数组的大小。在C中,宏是用来做这样的事情而不依赖于

回答 4 投票 0

实现两种数据结构以迭代不同值的最有效方法是什么

我正在尝试实现一个数据结构来解析数据并进行数据分析 我的数据格式如下 日期时间数据 数据 数据 1999年3月31日 20:40 6 130 19.95 1999年3月31日 23:50 3 440 1...

回答 1 投票 0

类中对象的初始化

类客户ID{ 民众: 客户 ID(int a) : a_(a){ std::cout << a; } private: int a_{0}; }; class Customer { public: Customer(in...

回答 1 投票 0

通用成员函数指针作为模板参数

考虑以下代码: #包括 使用命名空间 std; 班级你好{ 民众: 无效 f(){ 计算<<"f"< 考虑这段代码: #include <iostream> using namespace std; class hello{ public: void f(){ cout<<"f"<<endl; } virtual void ff(){ cout<<"ff"<<endl; } }; #define call_mem_fn(object, ptr) ((object).*(ptr)) template<R (C::*ptr_to_mem)(Args...)> void proxycall(C& obj){ cout<<"hello"<<endl; call_mem_fn(obj, ptr_to_mem)(); } int main(){ hello obj; proxycall<&hello::f>(obj); } 当然,这不会在第 16 行编译,因为编译器不知道 R、C 和 Args 是什么。但还有另一个问题:如果试图在 ptr_to_mem 之前定义这些模板参数,他会遇到这种糟糕的情况: template<typename R, typename C, typename... Args, R (C::*ptr_to_mem)(Args...)> // ^variadic template, but not as last parameter! void proxycall(C& obj){ cout<<"hello"<<endl; call_mem_fn(obj, ptr_to_mem)(); } int main(){ hello obj; proxycall<void, hello, &hello::f>(obj); } 令人惊讶的是,g++ 并没有抱怨 Args 不是模板列表中的最后一个参数,但无论如何它无法将 proxycall 绑定到正确的模板函数,只是指出它是一个可能的候选者。 有什么解决办法吗?我的最后一招是将成员函数指针作为参数传递,但如果我可以将它作为模板参数传递,它将更适合我的代码的其余部分。 编辑: 正如一些人指出的那样,这个例子似乎毫无意义,因为 proxycall 不会传递任何参数。在我正在处理的实际代码中,情况并非如此:参数是通过一些模板技巧从 Lua 堆栈中获取的。但这部分代码与问题无关,而且相当冗长,所以我不会将其粘贴到这里。 你可以尝试这样的事情: template <typename T, typename R, typename ...Args> R proxycall(T & obj, R (T::*mf)(Args...), Args &&... args) { return (obj.*mf)(std::forward<Args>(args)...); } 用途:proxycall(obj, &hello::f); 或者,要将 PTMF 变成模板参数,请尝试专业化: template <typename T, T> struct proxy; template <typename T, typename R, typename ...Args, R (T::*mf)(Args...)> struct proxy<R (T::*)(Args...), mf> { static R call(T & obj, Args &&... args) { return (obj.*mf)(std::forward<Args>(args)...); } }; 用途: hello obj; proxy<void(hello::*)(), &hello::f>::call(obj); // or typedef proxy<void(hello::*)(), &hello::f> hello_proxy; hello_proxy::call(obj); 在现代 C++ 中,可以使用 template<auto> 和通用 lambda 包装器: #include <utility> #include <functional> template<auto mf, typename T> auto make_proxy(T && obj) { return [&obj] (auto &&... args) { return (std::forward<T>(obj).*mf)(std::forward<decltype(args)>(args)...); }; } struct R {}; struct A {}; struct B {}; struct Foo { R f(A &&, const B &) { return {}; } //R f(A &&, const B &) const { return {}; } }; int main() { Foo foo; make_proxy<&Foo::f>(foo)(A{}, B{}); //make_proxy<static_cast<R (Foo::*)(A &&, const B &) const>(&Foo::f)>(std::as_const(foo))(A{}, B{}); //make_proxy<static_cast<R (Foo::*)(A &&, const B &)>(&Foo::f)>(foo)(A{}, B{}); } 如果存在重载,应该像注释代码中那样显式指定成员函数类型。

回答 2 投票 0

是否可以哄 std::atomic<T> 输出 CMPXCHG16B

对于我对在 Windows x64 上使用原子互锁操作不感兴趣的类型,是否可以诱导 std::atomic 输出 CMPXCHG16B,或者我只需接受它并执行原子操作

回答 2 投票 0

温度范围分组算法[修订]

请注意,这是先前已关闭问题的更详细版本。 我有一个场景,我有 N 个物品(N 是一个很大的数字),每个物品都有一个最低允许温度(min_temp)...

回答 1 投票 0

std::原子错误:没有为后缀“++”声明“operator++(int)”[-fpermissive]

我试图通过不同的线程更新原子变量并收到此错误。 这是我的代码。 类计数器 { 民众: std::atomic 完成; bool fn_write (int 大小)

回答 2 投票 0

没有匹配的构造函数来初始化“string”(又名“basic_string<char>”)

这是代码: #包括 #包括 使用命名空间 std; 类 Foo { 民众: 运算符 string() const { 返回 n; } 字符串 n {"foo"}; }; int main (int a...

回答 2 投票 0

如何使用 STL 复制 C++ 中的映射、过滤和归约行为?

我想我们可以使用 std::transform 来复制 C++ 中的映射行为,如下所示: std::vector = { 1 , 2 , 3 ,4 }; std::vector out(in.size()); std::transform(in.begin(...

回答 3 投票 0

为什么我们不能使用以下 set 语法进行列表初始化<A, Less>?

我下面有简单的示例代码。 #包括 #包括 使用命名空间 std; A类{ 民众: A() = 默认值; A(int x) : _x(x) {} int getX() { 返回 _x; } 私人...

回答 1 投票 0

如何使用 std 合并/计算 std:array 中相邻的 1?

假设我有一个 std:array 例如: 0 1 1 1 0 1 1 0 我想使用 std (如果可能)在 c++11 中执行此操作: 相邻 1 的和 删除求和值 将0转变为1 所以得到这个结果...

回答 1 投票 0

这个循环函数在c++11源码中是否可以进入无限循环?

模板<> 内联 bool _Sp_counted_base<_S_atomic>::_M_add_ref_lock_nothrow() noexcept { // 执行无锁加非零操作。 _Atomic_word __count = _M_get_use_count...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.