C ++ 14是2014年批准的C ++标准的名称。它基于以前的C ++ 11标准,改进了核心语言和标准库并添加了一些功能。
我想要2个方法,一个是SetVariable,另一个是MyClass中的GetVariable 两者都将接收一个枚举和参数,参数可以不止一种,也可以不止一种类型 并根据...
我有一个如下所示的自定义类标识符,并且需要帮助来理解由于为自定义用户类标识符定义哈希函数而出现的编译时错误。班级
SFINAE 构造函数中存在 `is_constructible` 问题
我无法理解为什么以下代码无法编译: #包括 #包括 #包括 枚举类错误 { 好=0, 挪威克朗=1 };
C++1y/C++14:常量表达式中不允许在其生命周期之外对对象进行赋值?
根据当前草案,以下 C++14/C++1y 程序是否格式错误? #包括 模板 结构体字面量数组 { T数据[n]; }; 模板<
我有一个 std::map> 和一个 KK 类型的“键”,它与 K 顺序兼容。如果键存在,我想返回相应的值。如果钥匙不存在,我
使用GLEW和SDL2定义的glClear和glClearColor在哪里?
我使用的是 Windows 10,而不是 2019、GLEW 2.1.0 和 SDL2。我很确定我已经把一切都联系起来了。我已经三重检查了。 我有所有版本信息和类似的东西,因为我正在关注......
自然数 n 的正式定义(在集合论中)如下: 0 是空集 1 = {0} n = {0,1,...,n-1} 我认为如果允许我这样做的话,这将使一些 C++ 代码变得更加简单......
我有一个带有指针的结构。它始终是动态分配的。因此,每当像这样创建对象时,我总是需要释放指针。 一个对象; obj->nums = new int(5); ...
假设我们有一个字符范围: // 例如 const char *valueBegin="123blahblah"; // 值的开始 const char *valueEnd=valueBegin+3; // 过去的一个值结束 ...,我想骗...
我正在更新一个距离矩阵,如果边缘存在于边缘向量中,该距离矩阵计算未加权图中两个节点之间的距离。 Edges 是一个二维向量,每个元素的大小为 2 wh...
如何二分搜索 std::vector 但返回 RandomAccessIterator?
我正在寻找一种 log2(N) 方式来搜索 std::vector 并接收 RandomAccessIterator。我希望它完全像 std::lower_bound() 一样工作,但返回 RandomAccessIterator 而不是 ForwardIt...
我有一个 int 向量和一个包含一些指向该向量的迭代器作为值的映射。我需要从映射中删除键以及值指向的向量元素。我的代码看起来很简短...
现在 std::experimental::Optional 已被接受(或即将被接受),我想知道当内部值由
是否可以在不创建临时对象的情况下分配对的成员? #包括 使用命名空间 std; 对< bool, int > foo() { 返回 make_pair( false, 3 ); }...
我正在编写一个算法来消除重叠,给定一定范围的线(我将其称为“线”,因为在这种情况下术语“范围”含糊不清)。 这是一条线的样子: 结构行{ ...
我尝试过这个: 模板::值>> void f(std::vector* a) { // 算术 P 的主体 } 模板 我试过这个: template<typename P, typename = std::enable_if_t<std::is_arithmetic<P>::value>> void f(std::vector<P>* a) { // body for arithmetic P } template<typename P, typename = std::enable_if_t<std::is_class<P>::value>> void f(std::vector<P>* a) { // body for class P } 我以为它会重载f,因为条件是互斥的,但发现它无法编译: 功能模板已定义。 如果我希望 f(std::vector<P>*) 的函数体取决于 P 是否算术,该怎么办? cppreference.com 上的 std::enable_if 文档说: 一个常见的错误是声明两个仅默认模板参数不同的函数模板。这是非法的,因为默认模板参数不是函数模板签名的一部分,并且声明具有相同签名的两个不同函数模板是非法的。 同一页面上的示例显示了与您类似的情况,并通过更改其中一个重载上的模板来解决它,同时保持函数本身相同的签名: // #4, enabled via a template parameter template<class T, typename std::enable_if< !std::is_trivially_destructible<T>{} && (std::is_class<T>{} || std::is_union<T>{}), int>::type = 0> void destroy(T* t) { std::cout << "destroying non-trivially destructible T\n"; t->~T(); } // #5, enabled via a template parameter template<class T, typename = std::enable_if_t<std::is_array<T>::value> > void destroy(T* t) // note, function signature is unmodified { for(std::size_t i = 0; i < std::extent<T>::value; ++i) { destroy((*t)[i]); } } /* template<class T, typename = std::enable_if_t<std::is_void<T>::value> > void destroy(T* t){} // error: has the same signature with #5 */ 因此,您可以在代码中执行类似的操作: template<typename P, std::enable_if_t<std::is_arithmetic<P>::value, int> = 0> void f(std::vector<P>* a) { // body for arithmetic P } template<typename P, typename = std::enable_if_t<std::is_class<P>::value>> void f(std::vector<P>* a) { // body for class P } 现场演示 使用标签调度,像这样或类似的: void f_helper(std::vector<P>* a, std::true_type) { /* implementation for arithmetic type P */ } void f_helper(std::vector<P>* a, std::false_type) { /* implementation for class type P */ } void f(std::vector<P>* a) { return f_helper(a, std::is_arithmetic<P>{}); }
如何避免 `std::to_string()` 将一个非常小的双精度数变为 0?
我需要将非常小的双数存储为字符串格式,然后将它们反转。但是,当我尝试在 4.7816457028269855e-143 这样的小数字上运行 std::to_string() 时...
我试图创建一个双向树状结构,所以我最终得到了以下结构: 模板 结构节点 { T值; std::向量<...
在问题 Idiom for Initializing an std::array using a Generator Function Take the Index? 中,它基本上询问如何初始化任意类型的数组,而这不一定是
当我使用 C++11 支持(使用 -std=c++11 标志)编译代码并使用非仅标头的 Boost 库时,我需要使用 -std=c+ 编译 Boost +11。这是因为 Boost 有一些