c++14 相关问题

C ++ 14是2014年批准的C ++标准的名称。它基于以前的C ++ 11标准,改进了核心语言和标准库并添加了一些功能。

使用正则表达式匹配函数定义

我想匹配一个函数定义。函数定义可以像 int foo () { // 一些语句 } int foo(int a, int b){} int foo() { } 我写了一个正则表达式 foo\s*\([\w, ]*\)\s*{ 和...

回答 2 投票 0

如何确定 boost::Optional 的(和其他)API?

我试图浏览 boost 可选文档,但我在所有 boost 文档中发现了这一点,因为我找不到明确的 API 定义。我想确定: 有没有运营商&a...

回答 1 投票 0

constexpr 成员函数给出 C2131

我已经理解了 const 和 constexpr 及其应用程序之间的区别,但我无法得到以下错误: // .hpp 文件 类我的类{ 民众: constexpr 双平方(双

回答 1 投票 0

如何迭代 std::vector 的范围

我有一个问题,关于使用 C++11 或 C++14 迭代向量的切片/范围的最佳方法是什么。假设我们有一个 std::vector 包含一堆值: std::向量 v = {0,1...

回答 1 投票 0

为什么 ASAN 没有将此问题报告为 stack-use-after-scope?

我无法理解 Address Sanitizer 背后的概念 - (范围后堆栈使用)。 #包括 使用命名空间 std; 类用户{ 民众: 用户(){

回答 1 投票 0

C++ 相当于 Java 的方法引用?

我有一个 std::vector>,我想从中检查是否至少有 1 个子向量为空。所以我有这个: std::any_of(vec.begin(), vec.end(), [](const auto...

回答 2 投票 0

std::integer_sequence 中是否允许枚举值?

此代码使用 GCC 13 和 Clang 17 可以正常编译和执行,但无法在 MSVC 上编译。我想知道代码是否需要按照标准工作,或者这是否是 M 的问题...

回答 1 投票 0

当两者同等匹配时,函数绑定到第二个模板而不是通用引用[重复]

这里我有点傻。所以我必须添加 const as 有疑问。 现在它打印左值。 当通用引用更匹配时,为什么它会打印左值 ? 这是否意味着当我们有左值引用时...

回答 1 投票 0

启用共享失败并出现 bad_weak_ptr

我正在尝试学习weak_ptr和enable_shared_from_this,在这里,我希望Component有指向Mediator的指针,并让Mediator了解Component。我不明白为什么这段代码会失败并显示

回答 1 投票 0

获取模板中的函数返回类型

如何获取传递给模板的任何函数的返回类型? 我不知道如何在 template 和 template 之间进行转换: 模板 如何获取传递给模板的任何函数的返回类型? 我不知道如何在 template<typename T> 和 template<typename Result, typename Args...> 之间转换: template<typename T> void print_name(T f) { static_assert(internal::is_function_pointer<T>::value || std::is_member_function_pointer<T>::value, "T must be function or member function pointer."); typename decltype(f(...)) Result; // ??? typename std::result_of<T>()::type Result; // ??? printf("%s\n", typeid(Result).name()); } void f_void() {} int f_int(int x) { return 0; } float f_float(int x, int y) { return 0.f; } struct X { int f(int x, float y) { return 0; } }; int main() { print_name(f_void); print_name(f_int); print_name(f_float); print_name(&X::f); return 0; } 我如何在函数Result中获取类型print_name? 一个可能的解决方案是使用函数声明来提取返回类型以及所有参数。你甚至不需要定义它。 它遵循一个最小的工作示例: #include<typeinfo> #include<cstdio> template<typename R, typename... A> R ret(R(*)(A...)); template<typename C, typename R, typename... A> R ret(R(C::*)(A...)); template<typename T> void print_name(T f) { printf("%s\n", typeid(decltype(ret(f))).name()); } void f_void() {} int f_int(int x) { return 0; } float f_float(int x, int y) { return 0.f; } struct X { int f(int x, float y) { return 0; } }; int main() { print_name(f_void); print_name(f_int); print_name(f_float); print_name(&X::f); return 0; } 如您所见,为ret提供的声明与提交的函数或成员函数具有相同的返回类型。 剩下的由 decltype 完成。 从 C++ 17 开始,答案是 std::invoke_result_t<T>

回答 2 投票 0

这是 std::quote bug 的行为吗?

我想用自定义类型做与 std::quote 相同的事情,但我想错过使用这种具有临时右值的 API。经过一番使用 std::quoted 后,我发现了以下内容......

回答 2 投票 0

如何序列化/反序列化派生类的 unordered_map 成员

所以我正在用 C++ 构建一个模拟文件系统,以更好地研究该语言,也许还可以进行一些系统级编程。我使用 Boost::Serialization 来保存文件系统的状态,当用户...

回答 1 投票 0

用可变参数替换模板参数列表

有人可以帮助我如何用可变参数模板参数替换模板类型列表,并在类中创建每种类型的唯一指针。 问题是我有课 模板...

回答 1 投票 0

C++ 中向量 STL 的 size() 函数与 INT_MIN 相比给出了意想不到的结果

#包括 使用命名空间 std; int main() { 向量 v = {1,2,3}; int maxi = INT_MIN; if(v.size() > maxi) 计算<<"YES"<<&q...

回答 2 投票 0

如何在编译时重复连接字符串?

我编写了以下在编译时使用字符串的代码: 模板 结构体 CnstString { 模板 使用push_back = CnstString 我编写了以下代码以在编译时使用字符串: template<char... Chars> struct CnstString { template<char... Aped> using push_back = CnstString<Chars..., Aped...>; constexpr static char value[] = {Chars...}; }; 我这样使用就可以了: #include <iostream> using str = CnstString<'H', 'e', 'l', 'l', 'o', '\0'>; int main() { std::cout << str << std::endl; return 0; // it will output "Hello" } 我想做的是使用递归模板结构体,在编译时拼接上面代码给出的字符串,并在递归终点处向数组追加一个'\0'。 我写这段代码的原因是因为我想多次连接同一个字符串。显然我不能像"Hello""Hello"那样将相同的字符串连接在一起。 递归模板结构如下所示: template<int N, typename Str> struct RepeatStr { using ret = RepeatStr<N-1, Str>; // this is an error, I don't know how to pass parameters }; template<typename Str> struct RepeatStr<-1, Str> { using ret = Str::push_back<'\0'>; }; 但是,我发现我不知道如何使用Str中的字符向自身追加字符。 有什么问题吗?或者它根本不可能在编译时完成? 您需要在 using 声明中添加关键字 template 来告诉编译器 push_back 使用模板。 template<int N, typename Str> struct RepeatStr { using ret = RepeatStr<N-1, Str>; }; template<typename Str> struct RepeatStr<-1, Str> { //--------------------vvvvvvvv------------------->works now using ret = Str:: template push_back<'\0'>; }; 工作演示

回答 1 投票 0

Codility 的 MinAvgTwoSlice 挑战 - C++

我正在尝试解决Codility第5课中的MinAvgTwoSlice问题,但我似乎找不到我的代码有什么问题。总体思路是,给定一个整数数组,必须找到

回答 1 投票 0

如何初始化与类具有相同类型的类的静态常量成员?

我有一个类,其静态常量成员与该类具有相同的类型。我收到一个错误,表明课程尚未完成。 #包括 类别 颜色 { 民众: 颜色(无符号字符

回答 1 投票 0

decltype(auto) 有哪些用途?

在 c++14 中引入了 decltype(auto) 习惯用法。 通常,它的用途是允许自动声明在给定表达式上使用 decltype 规则。 寻找“良好”用法的示例...

回答 2 投票 0

如何将函数模板参数限制为特定类模板的特化

我的结构如下: 模板 类模板类 { ... }; 模板 类 UsesTemplateClass { 民众: UsesTemplateClass( TClass...

回答 3 投票 0

如何将函数模板参数限制为特定类模板的特化

我的结构如下: 模板 类模板类 { ... }; 模板 类 UsesTemplateClass { 民众: UsesTemplateClass( TClass...

回答 3 投票 0

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