Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

1
在C ++中,^(){}和^ {}是什么意思?
我最近阅读了一些这样的C ++代码: setData(total, &user, ^() { struct dst_t to = {ip, port}; sendData(to, data); }); getData(total, ^{ recvData(data, NULL); }); 我从来没有见过^() {},也没有^{}。他们的意思是什么?某种匿名功能?
10 c++ 

5
为什么不能检索变体的索引并使用它来获取其内容?
我正在尝试访问变体的内容。我不知道里面有什么,但值得庆幸的是,变体确实可以。所以我想我只想问问变体它在什么索引上,然后将该索引用于std::get它的内容。 但这不能编译: #include <variant> int main() { std::variant<int, float, char> var { 42.0F }; const std::size_t idx = var.index(); auto res = std::get<idx>(var); return 0; } 错误发生在std::get呼叫中: error: no matching function for call to ‘get<idx>(std::variant<int, float, char>&)’ auto res = std::get<idx>(var); ^ In file included from /usr/include/c++/8/variant:37, from main.cpp:1: /usr/include/c++/8/utility:216:5: …
10 c++  c++17  variant 

2
在只读情况下,什么时候需要空终止的字符串?
我一直在研究该std::string_view库,并且一直在考虑更改我一直在努力使用的代码库std::string_view。但是,在我阅读过的许多主题中,有关何时何地使用std::string_view而不是的主题const std::string &。我已经看到许多答案说:“何时不需要以null结尾的字符串。” 因此,当我开始在网上搜索“何时需要以null结尾的字符串?” 在这个问题上,我还没有真正有用的答案。 我可以想到一个外部库的示例,您需要链接到该外部库std::string。在那种情况下,您将需要一个以null结尾的字符串,因为该库需要它。我想另一个例子是,如果您需要修改字符串本身,但是const &如果我们需要修改它,那么我们就不会通过。 那么什么时候需要使用以null结尾的字符串? 我看过的链接: std :: string_view比const std :: string&到底有多快? 什么时候可以传递const&std :: string而不是std :: string_view? 为什么只有字符串视图? 在C ++ 17中使用const std :: string&参数是否有意义?

1
是否可以限制C ++ 17并行`for_each`的线程数?
我使用std::for_eachwith std::execution::par对表示为结构向量的巨大输入执行复杂的计算。该计算不需要任何与硬件有关的延迟(例如,网络或磁盘IO),它是“仅CPU”计算。对我来说,逻辑上讲,没有必要创建我们拥有硬件的更多OS线程;但是,Visual C ++ 2019平均创建50个线程,有时甚至只有12个硬件线程,最多可以创建500个线程。 有没有办法来限制并行线程计数至hardware_concurrency与std::for_each和std::execution::par,或创建合理的线程数是使用自定义代码的唯一途径std::thread?

2
不同C ++编译器之间的自动类型推导不匹配
因此,我试图以某种现代C ++的形式实现点积(https://en.wikipedia.org/wiki/Dot_product),并提出了以下代码: #include <iostream> template<class... Args> auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type<Args...>::type s = 0; while( i1 != v1.end() && i2!= v2.end()) { s …

2
使用C ++构建解决方案后缺少VCRUNTIME140_1.dll
我创建了一个小型文字冒险。我已使用Release和x64设置通过Visual Studio Community 2019构建了该解决方案。我已经将* .exe文件与其他生成的文件一起压缩,并将它们发送到未安装VS的另一台PC,并且出现了您在图像中看到的错误。我搜索了我的电脑,该文件存在于几个不同的文件夹中,其中一个是system32,所以我不知道将文件放置在新电脑上的位置。 任何帮助,将不胜感激。谢谢
10 c++  dll 

2
我的编译器是否忽略了我未使用的静态thread_local类成员?
我想在我的课程中做一些线程注册,所以我决定为该thread_local功能添加一个检查: #include <iostream> #include <thread> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } ~Foo() { std::cout << "~Foo()" << std::endl; } }; class Bar { public: Bar() { std::cout << "Bar()" << std::endl; //foo; } ~Bar() { std::cout << "~Bar()" << std::endl; } private: static thread_local …

1
是否允许require表达式“捕获”封闭范围的变量?
在下面的示例中,函数自变量用于测试require表达式是否可以正确使用它们。require表达式不带参数。它直接使用函数作用域中的变量: #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) v.resize(n); } template<typename T> void Eziser(T &v, std::size_t const n) { if constexpr (requires { v.eziser(n); }) v.eziser(n); } int main() { std::vector<int> v; Resize(v, 10u); Eziser(v, 10u); } 上面的代码使用Clang概念分支进行编译。但是,GCC10仅接受对的呼叫Resize。GCC9 …

2
链接时如何取消副本?
我正在创建一个链接类型的类,例如下面的小示例。似乎在链接成员函数时,将调用复制构造函数。有没有办法摆脱复制构造函数调用?在下面的玩具示例中,很明显,我只在处理临时工,因此“应该”(也许不是按标准,而是从逻辑上)是一种省略。复制省略的第二个最佳选择是调用move构造函数,但事实并非如此。 class test_class { private: int i = 5; public: test_class(int i) : i(i) {} test_class(const test_class& t) { i = t.i; std::cout << "Copy constructor"<< std::endl; } test_class(test_class&& t) { i = t.i; std::cout << "Move constructor"<< std::endl; } auto& increment(){ i++; return *this; } }; int main() { …
10 c++  c++14  c++17 

3
在以下情况下,为什么不需要对依赖类型使用typename?
我一直在这里阅读有关删除类型引用的信息。 它给出以下示例: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, std::remove_reference<int>::type>(); // Why not typename std::remove_reference<int>::type ? print_is_same<int, std::remove_reference<int &>::type>();// Why …

5
动态链接-Linux与。视窗
在Windows下,当我在MSVC的DLL项目中编译C / C ++代码时,我得到2个文件: MyDll.dll MyDll.lib 据我了解,MyDll.lib其中包含某种指示符表,用于指示dll中的函数位置。使用此dll时(例如在exe文件中),MyDll.lib在链接期间会嵌入到exe文件中,因此在运行时它“知道”函数的位置MyDll.dll并可以使用它们。 但是,如果我在Linux下编译相同的代码,我只会得到一个MySo.so不带 文件的文件MySo.a(相当于libLinux中的文件),那么MySo.so如果在链接过程中未嵌入任何内容,Linux下的可执行文件如何知道函数的位置?


2
如何使用SWIG将numpy数组转换为vector <int>&(reference)
我的目标: 在python中创建3个numpy数组(其中2个将使用特定的值初始化),然后通过swig将所有三个数组发送到c ++函数中作为矢量引用(这是为了避免复制数据和失去效率)。进入c ++函数后,将两个数组相加,然后将它们的总和放在第三个数组中。 vec_ref.h #include &lt;vector&gt; #include &lt;iostream&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2); vec_ref.cpp #include "vec_ref.h" #include &lt;cstring&gt; // need for size_t #include &lt;cassert&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2) { std::cout &lt;&lt; "inside add_vec_ref" &lt;&lt; std::endl; assert(src1.size() == src2.size()); dst.resize(src1.size()); for (size_t i = 0; …
10 python  c++  numpy  vector  swig 


1
SFINAE与不同的编译器一起使用VoidT会导致不同的结果
考虑以下代码: template &lt;typename T&gt; using VoidT = void; class A { public: using TEST = int; }; class C { public: using DIFFERENT = int; }; template &lt;typename T, typename Enable = void&gt; class B { public: B() = delete; }; template &lt;typename T&gt; class B&lt;T, VoidT&lt;typename T::TEST&gt;&gt; { public: …
10 c++ 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.