-
5 votesanswersviews
为什么不将typename模板参数隐式识别为类型?
通常在C类定义中,特别是在库,特征类等中,您会看到类似于以下代码段的代码: template <typename Bar, typename Baz> class Foo { using bar_type = Bar; using baz_type = Baz; // ... etc. } 只有这些行你才可以参考 Foo<A,B>::bar_typ... -
2 votesanswersviews
嵌套类是类模板中的依赖类型?
考虑以下: template<class> struct T { struct T1 { struct T2 { }; }; /*typename*/ T1::T2 m; }; 如果没有 typename ,编译将失败,因为T2被视为依赖名称,因此不是类型 . 在查看C 17标准草案(N4659)之后,... -
3 votesanswersviews
功能的扣除指南作为模板参数
We can use std::unique_ptr to hold a pointer allocated with malloc which will be freed appropriately.但是,产生的 std::unique_ptr 的大小将是2个指针,一个用于指向对象的指针,一个用于指向删除函数的指针,而不是通常的指向对象的指针和隐式 delete . 正如一个答案所指出的那样,... -
1 votesanswersviews
C 17模板推导指南不用于空参数集(第2版)?
在C++17 template deduction guide not used for empty parameter set?之后进入模板演绎指南中的另一个怪异(不幸的是,_939217_仍然没有在GCC主干中修复:(): #include <utility> template <class T> struct success { T value; const... -
8 votesanswersviews
是否保证模板模板参数调用用户提供的演绎指南
考虑一个例子: #include <type_traits> #include <string> template <template <class> class TT> //#1 struct Foo { static void foo() { static_assert(std::is_same_v<decltype(T... -
7 votesanswersviews
使用来自元函数的typedef声明成员函数
请考虑以下代码: template <class> struct Foo_s { using type = void(); }; template <class> using Foo_u = void(); template <class T> struct Bar { Foo_u<void> foo... -
882 votesanswersviews
C 17有哪些新功能?
C 17现在功能齐全,因此不太可能经历大的变化 . 为C 17提出了数百项提案 . 在C 17中将哪些功能添加到C中? 当使用支持“C 1z”的C编译器时,当编译器更新到C 17时,哪些功能可用? -
5 votesanswersviews
Clang在fold表达式中找不到模板二元运算符
这是我连接元组的二元运算符: template <class... Args1, class... Args2> constexpr decltype(auto) operator+(const std::tuple<Args1...> &tup1, const std::tuple<Arg... -
0 votesanswersviews
使用模板特化分割可变参数包
我正在尝试定义一种模板'map'原语(如map-reduce) . 我的想法是我想将一个函数应用于模板参数包的每个项目 . 该函数可以是任何可调用对象 . 它可以返回任何类型(虽然返回类型将被忽略),并且它可以在有问题的项目之上采取其他参数 . 棘手的部分是我有效地拥有两个需要处理的参数包 . 它们最初会被打包在一起,但我想使用模板特化来拆分它们 . 以下是我尝试这样做的尝试 . 如果不明显(由于... -
219 votesanswersviews
现代C 11 / C 14 / C 17和未来C 20中的字符串
与所有其他类似问题相反,这个问题是关于使用新的C功能 . 2008 c Is there a simple way to convert C++ enum to string? 2008 c Easy way to use variables of enum types as string in C? 2008 c++ How to easily map c++ enums to st... -
162 votesanswersviews
std :: string_view究竟比const std :: string&更快?
std::string_view已经达到了C 17,并且广泛建议使用它而不是 const std::string& . 其中一个原因是性能 . 当有人用作参数类型时,有人可以解释 exactly std::string_view /会比 const std::string& 快吗? (假设在被叫方中没有副本) -
6 votesanswersviews
使用包含不完整类型的`std :: vector`递归定义和访问`boost :: variant` - libstdc vs libc
我正在尝试使用incomplete包装类和std::vector作为我的间接技术来定义和访问"recursive" boost::variant . 我的实现适用于 libstdc++ ,但不适用于 libc++ . 这是我定义我的变体的方式: struct my_variant_wrapper; using my_variant_array = std::vector&... -
15 votesanswersviews
在继承自std :: variant的类上使用std :: visit - libstdc vs libc
请考虑以下代码段: struct v : std::variant<int, std::vector<v>> { }; int main() { std::visit([](auto){ }, v{0}); } clang 7用 -stdlib=libc++ -std=c++2a 编译代码; 带有 -std=c++2a 的 g 9无法编译代码,并出现以下错... -
-7 votesanswersviews
为什么C 17在模板中有两个关键字(class和typename)用于相同的目的
模板模板参数声明只能在C 17之前使用关键字class而不能使用typename . 这是直到C 17的那些之间的差异 . 从C 17开始,两者都是相同的 . 那么为什么C 17不赞成模板参数中的一个关键字(class)和类型参数声明? 因为 class 有两个不同的含义 -
11 votesanswersviews
用户定义的演绎指南是否涉及模板模板参数作为符合指导标准的模板
背景 昨天我问了一个关于guarantees of deduction guides usage in case of template template parameters的问题 . 当Barry改变了对代码标准符合性确认的答案时,我感到非常惊讶 . 令我惊讶的是,实际上并不是因为扣除指南可以应用于模板模板参数,而是来自符合此合规性的标准部分,即[temp.param]/3: 标识符不遵循省... -
470 votesanswersviews
什么是聚合和POD以及它们如何/为何特殊?
这FAQ是关于聚合和POD的,涵盖以下材料: Aggregates 是什么? 什么是 POD s(普通旧数据)? 他们有什么关系? 他们如何以及为何特别? C 11有什么变化? -
3 votesanswersviews
如果std :: string :: substr返回std :: string_view会有什么缺点?
看看这个例子(取自here): class foo { std::string my_str_; public: std::string_view get_str() const { return my_str_.substr(1u); } }; 这段代码很糟糕,因为 substr 返回一个临时的 std::string ,所以返回的 std::stri... -
0 votesanswersviews
我应该使用C 17来构建安全系统吗? [等候接听]
我正在使用C构建一个安全系统(很难根据错误进行更新) . 你认为由于可能有错误的编译器/库,最好远离C 17吗? 在以前的C版本中发现了哪些重大缺陷? -
6 votesanswersviews
修改不可变的子结构
假设我有一个不可变的包装器: template<class T> struct immut { T const& get() const {return *state;} immut modify( std::function<T(T)> f ) const { return immut{f(*state)}; } immut(T in):state(s... -
1 votesanswersviews
在C中为非const模板化版本的朋友
考虑以下代码: template<class T> class Me { private: T* data; size_t size; friend class Me<?????>; public: Me(size_t s) : data(new T[s]), size(s) {} virtual ~Me() { delete []... -
-3 votesanswersviews
无法让我的C代码工作(初学者)[暂停]
香港专业教育学院尝试了很多不同的组合,这基本上是c初级书中的一个例子的直接复制,我对这整个事情非常新,请尽可能帮助谢谢*如果你有任何指针/提示初学者ID很高兴让他们失望,我15岁,学生,真的想学习这些东西 #include <iostream> using namespace std; int main(){ int TBN = 0; for (int val =... -
3 votesanswersviews
使用std :: optional将std :: vector <int>传递给函数
我不清楚是否通过引用将一个可选的int向量传递给函数的正确代码是: void test_func(std::optional<std::vector<int>&> vec) 要么 void test_func(std::optional<std::vector<int>>& vec) 任何帮助非常感谢 . -
4 votesanswersviews
如何正确实现具有可变数量的std :: string_view参数的函数?
所需行为 我基本上想要的是创建一个这样的函数: void func(std::string_view... args) { (std::cout << ... << args); } 它应该能够与可转换为 std::string_view 的类一起工作 only . 例: int main() { const char* tmp1 = "Hel... -
12 votesanswersviews
为什么sizeof(std :: variant <char>)== 8使用libc而不是2(比如MSVC的STL和libstdc)?
考虑this example on Compiler explorer . 基本上,我们有这个代码片段: #include <cstdint> #include <variant> enum class Enum1 : std::uint8_t { A, B }; enum class Enum2 : std::uint8_t { C, D }; using Var ... -
8 votesanswersviews
std :: visit如何使用std :: variant?
我在这里看 std:variant/std::visit doc:http://en.cppreference.com/w/cpp/utility/variant/visit并且还搜索了很多想要了解 std::visit 和 std::variant 背后的魔力 . 所以我的问题如下 . 在提供的示例中, polymorphic lambda 和"overloaded"都发生... -
18 votesanswersviews
在模板模板参数的情况下,非类型模板参数的占位符类型是否可互换
考虑一个简单的例子: int x; template <template <auto> class TT> struct Foo { void foo() { TT<(x)> tt; static_cast<void>(tt); } }; template <decltype(auto)> stru... -
4 votesanswersviews
当返回类型为void时,使用其他lambda结果调用lambda
以下函数使lambda使用第一个callable的结果调用第二个callable . 如果第一个callable返回一个元组,它将应用于第二个callable . template<typename T> struct is_tuple : std::false_type{}; template<typename... T> struct is_tuple<std:... -
15 votesanswersviews
使用lambda作为非类型模板参数时为什么gcc失败?
以下片段compiles与Clang 4.0没有错误,但GCC 7.0产生errors(注意使用-std = c 1z标志) . using FuncT = int (*)(double); template <FuncT FUNC> int temp_foo(double a) { return FUNC(a); } int foo(double a) { ret... -
9 votesanswersviews
标准定义了volatile变量可以改变的位置?
标准定义了哪个volatile变量可以不被检测到? 我发现了两个关于volatile的规范性文本: intro.execution/7: 读取由volatile glvalue([basic.lval])指定的对象,修改对象,调用库I / O函数或调用执行任何这些操作的函数都是副作用,这是状态的变化执行环境 . 表达式(或子表达式)的评估通常包括值计算(包括确定用于glvalue评估的对象的身份... -
19 votesanswersviews
GCC和Clang不同意C 17 constexpr lambda捕获
考虑这个将变量声明为constexpr的示例,通过lambda中的副本捕获它,并声明另一个constexpr变量,该变量是constexpr函数从原始变量展开非类型模板参数的结果 . #include <utility> template<int I> constexpr auto unwrap(std::integral_constant<int, I>) ...