c++11 相关问题

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

只有“void”是不可引用类型吗?

#包括 使用 std::cout; 使用 std::endl; 使用 std::boolalpha ; 使用 std::add_rvalue_reference_t ; 使用 std::is_reference_v; int 主函数(无效){ 计算<< boolalpha <<

回答 1 投票 0

如何正确重写C++中的基类函数?

我有以下两个结构,child继承自base: 结构基{ 双 S1(int x){ 返回x*x; } 双 S2(int x){ 返回 2*x; } 双 S(int x){ ...

回答 1 投票 0

如何在基类中使用虚函数?

考虑以下两个结构: 结构潜力{ 虚拟双能量(int full_system, int不对粒子_id)=0; 双能量(int full_system){ int n_粒子=100; 窦...

回答 1 投票 0

使用 _MSVC_LANG 代替 __cplusplus 安全吗?

我正在尝试使用 Microsoft Visual C++ 编译器(以前使用 GCC 等编译器)编译多平台 C++ 项目。 现在我遇到了一些预处理器指令,例如...

回答 1 投票 0

为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习 C++ 并使用终端。我的代码使用 g++ 和 C++11 编译并运行良好,但在过去几天里它开始出现错误并且......

回答 1 投票 0

这个算法叫什么名字——递归算法?

有必要构建值键的所有组合: 输入: 数据[“键1”] = {“值1”,“值2”,“值3”}; 数据["key2"] = {"value4",...

回答 1 投票 0

模板特化 - 编译器无法预测函数参数类型

我试图使用函数参数来专门化模板化函数,但编译器无法推断正确的专门化。除非我明确说明该函数,否则我会收到编译器错误

回答 1 投票 0

所有 CopyConstructible 类型都是 MoveConstructible 类型吗?

根据工作草案N3337(与已发布的ISOC++11标准最相似的草案)和cppreference.com,答案是肯定的。 N3337: 表 21 — 可复制构造的要求(另外...

回答 3 投票 0

C++11 中的 boost::thread_group?

C++11中有类似boost::thread_group的东西吗? 我只是想将我的程序从使用 boost:thread 移植到 C++11 线程,但找不到任何等效的东西。

回答 3 投票 0

数字类型的 C++ 模板

我想要一个用于选择数字类型的模板,但我也想要一个全局类型模板。我尝试应用这个问题的解决方案,但没有成功: 模板 我想要一个用于选择数字类型的模板,但我也想要一个全局类型模板。我尝试应用this问题的解决方案,但它不起作用: template<typename T, typename ... Types> void myFct(T arg1, Types ... rest) { /*do stuff*/ } template<typename T, typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type, typename ... Types> void myFct(T arg1, Types ... rest) { /* do stuff */ } 因为现在我有两个具有相同标头的函数。做这样的事情的正确方法是什么: template<typename T, typename ... Types> void myFct(T arg1, Types ... rest) { if (isNumeric(T)) doNumericStuff(); else doStuff(); } 可能有更好的方法来做到这一点,但对我来说最简单的方法是将 enable_if 打到返回类型上: template<typename T, typename ... Types> typename std::enable_if< std::is_arithmetic<T>::value >::type myFct(T arg1, Types ... rest) { /*do numeric stuff*/ } template<typename T, typename ... Types> typename std::enable_if< !std::is_arithmetic<T>::value >::type myFct(T arg1, Types ... rest) { /*do non-numeric stuff*/ } 一旦你有不止两个互斥的选项,这就会变得非常笨拙,但这肯定会起作用。 C++17 更新 if constexpr 丢弃未使用的分支,因此这更容易(实时链接): void myFct() { } template<typename T, typename... Ts> void myFct(T arg1, Ts... rest) { if constexpr (std::is_arithmetic<T>{}) { std::cout << "squared: " << arg1*arg1 << '\n'; } else { std::cout << "not-number\n"; } myFct(rest...); // recurse } 您可以在此处使用标签分派,并重载实现函数,因为您的“做的事情”似乎一次只涉及一个对象。 template <typename T> void do_stuff(T arg, std::true_type) { std::cout << "number\n"; } template <typename T> void do_stuff(T arg, std::false_type) { std::cout << "not-number\n"; } void myFct() { } template<typename T, typename... Ts> void myFct(T arg1, Ts... rest) { // is_arithmetic will derive either true_type or false_type do_stuff(arg1, std::is_arithmetic<T>{}); myFct(rest...); // recurse } 这是获得“静态 if”之类的典型模式 如果我用 myFct(1, std::string{}, 2.0); 调用它,我会得到输出 number not-number number

回答 2 投票 0

如何配置xtensa-lx106-elf使用nonos-sdk为esp8266编译c++代码?

我在使用 xtensa-lx106-elf 编译 C++ 代码时遇到困难。 我正在使用的芯片(esp8266)的制造商提供了一个sdk(nonos-sdk)。 这个sdk中的库之一实现了功能...

回答 2 投票 0

获取CAN比特率

我想用C++读取我的socketcan套接字当前配置的CAN比特率。 我可以使用 ip -det link show can0 查看比特率: 9:can0: mtu 16 qdisc pfifo_fast

回答 3 投票 0

为什么 glewInit() 会给我一个段错误?

我正在使用 glw 和 glfw 进行 opengl 项目 该项目较大,但只有初始化代码无法正常工作。我使用glew 2.2.0_1和glfw 3.3.8 (顺便说一句。我在 debu 中运行了这个......

回答 1 投票 0

覆盖map::直接与lambda函数比较

尝试使用 lambda 覆盖 map::compare 函数,似乎以下解决方案有效。 自动 cmp = [](const int&a, const int& b) { 返回 a < b; }; std::map 尝试使用 lambda 覆盖 map::compare 函数,似乎以下解决方案有效。 auto cmp = [](const int&a, const int& b) { return a < b; }; std::map<int, int, decltype(cmp)> myMap(cmp); 但是,我必须先定义cmp,然后再使用它。 我可以在不定义“cmp”的情况下执行此操作吗? 不,你不能在未评估的上下文中使用 lambda —— 即示例中的模板参数。 所以你必须在其他地方定义它(使用auto),然后使用decltype...另一种方式,正如已经提到的那样,是使用“序数”函子 如果您的问题是关于“如何在定义映射时使用 lambda 表达式 *once*”,您可以利用 lambda 到 std::function 的隐式转换,如下所示: #include <iostream> #include <functional> #include <map> int main() { auto m = std::map<int, int, std::function<bool(const int&, const int&)>>{ [](const int& a, const int& b) { return a < b; } }; return 0; } 您可以为该 map 类型引入别名,以减少以后的输入... #include <iostream> #include <functional> #include <map> #include <typeinfo> typedef std::map< int, int, std::function<bool(const int&, const int&)> > MyMap; int main() { auto cmp = [](const int& a, const int& b) { return a < b; }; MyMap map(cmp); return 0; } 使用 std::function 为比较器类型提供适当的类型签名,您可以定义映射类型,然后分配您想要的任何 lambda 比较。 您可以执行类似的操作,其中映射的类型是从您传递给函数的函数推导出来的。 #include <map> template<class Key, class Value, class F> std::map<Key, Value, F> make_map(const F& f) { return std::map<Key, Value, F>{f}; } int main() { auto my_map = make_map<int, int>([](const int&a, const int& b) { return a < b; }); my_map[10] = 20; } 我没有看到这样做的太多理由,但我不会说这是无用的。通常,您需要一个已知的比较器,以便可以轻松传递地图。通过上面的设置,您可以一直使用模板函数,如下所示 tempalte<class F> void do_somthing(const std::map<int, int, F>& m) { } 这不一定是坏事,但我的直觉告诉我,拥有一种只能由泛型函数处理的类型是不好的。我认为它对于 lambda 函数来说效果很好,但仅此而已。这里的解决方案是使用 std::function #include <map> #include <functional> template<class Key, class Value> using my_map_t = std::map<Key, Value, std::function<bool(const Key&, const Key&)>>; int main() { my_map_t<int, int> my_map{[](const int&a, const int& b) { return a < b; }}; my_map[10] = 20; } 现在您可以使用任何您想要的谓词,并且您有一个可以使用的具体类型,my_map 希望这有帮助! 自 C++20: 如果没有指定捕获,闭包类型有一个默认的default 构造函数。 因此你可以做到这个: std::map<int, int, decltype([](const int&a, const int& b) { return a < b; })> myMap; int main() { myMap.insert({7, 1}); myMap.insert({46, 2}); myMap.insert({56, 3}); for (const auto& [key,value]:myMap) { std::cout << key << " " << value << std::endl; } }

回答 4 投票 0

如何在我的 dll 接口或 ABI 中使用标准库 (STL) 类?

之前有一些关于导出包含与 Visual Studio 警告 C4251 相关的 stl 类的类的问题:这个问题或者这个问题。 我已经读过excel了...

回答 1 投票 0

steady_clock在windows/cygwin上只有10ms分辨率吗?

我有一个令人惊讶的观察结果,即在测量持续时间时,steady_clock 的分辨率仅为 10 毫秒。我在 cygwin 下为 windows 编译。这是可悲的事实还是我做错了什么? 自动启动 = std::ch...

回答 2 投票 0

输出结果为0。基本单利问题

我一直在尝试用C++做一些基本的函数调用和函数,并且在单利计算中得到错误的输出为0。需要帮助。 使用命名空间 std; int SI(int 原理, ...

回答 1 投票 0

如何使用_CrtDumpMemoryLeaks生成的信息生成文件

我正在尝试实现基于CRT调试工具的日志文件创建,到目前为止我已经生成了一个带有一些泄漏的简单文件,只是为了看看它是如何工作的。 #include“OtherSource.h” #

回答 1 投票 0

std::map的key类型可以是double还是float吗?

我写了一个测试用例: //环境:编译器=msvc140-x64 系统=win10 #包括 #包括 int main(int argc, char* argv[]) { 标准::地图

回答 1 投票 0

C++11中的thread_local是什么意思?

我对C++11中thread_local的描述感到困惑。我的理解是,每个线程在函数中都有唯一的局部变量副本。全局/静态变量可以被所有

回答 3 投票 0

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