Questions tagged «c++»

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



4
智能指针(提升)说明
以下一组指针有什么区别?何时在生产代码中使用每个指针(如果有的话)? 例子将不胜感激! scoped_ptr shared_ptr weak_ptr intrusive_ptr 您是否在生产代码中使用boost?

5
如何在CMake文件中添加链接器或编译标志?
我正在使用arm-linux-androideabi-g++编译器。当我尝试编译一个简单的“ Hello,World!”时 程序可以编译良好。当我通过在该代码中添加简单的异常处理来对其进行测试时,它也可以工作(添加-fexceptions.. 后,我认为默认情况下它是禁用的)。 这是针对Android设备的,我只想使用CMake,而不是ndk-build。 例如 - first.cpp #include <iostream> using namespace std; int main() { try { } catch (...) { } return 0; } ./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions 没问题... 问题 ...我试图用CMake文件编译文件。 我想将其添加-fexceptions为标志。我尝试过 set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" ) 和 set ( CMAKE_C_FLAGS "fexceptions") 它仍然显示错误。
220 c++  cmake 


14
C ++ 11 auto关键字多少钱?
我一直在使用autoC ++ 11标准中的new 关键字来处理复杂的模板化类型,这是我认为它的设计目的。但是我还将它用于诸如以下的事情: auto foo = std::make_shared<Foo>(); 更怀疑的是: auto foo = bla(); // where bla() return a shared_ptr<Foo> 关于这个主题,我还没有看到太多讨论。auto由于类型通常是文档和健全性检查的一种形式,因此似乎可以过度使用。您在哪里划界线auto?此新功能的建议用例是什么? 需要澄清的是:我不是在征求哲学意见;我要求标准委员会提供此关键字的预期用途,并可能对在实践中如何实现预期用途提出意见。 旁注:此问题移至SE.Programmers,然后返回到堆栈溢出。关于这个的讨论可以在这个元问题中找到。

14
如何在C ++中使用枚举
假设我们有一个enum类似下面的内容: enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday}; 我想为此创建一个实例enum并使用适当的值对其进行初始化,所以我这样做: Days day = Days.Saturday; 现在,我要检查具有现有enum值的变量或实例,所以我这样做: if (day == Days.Saturday) { std::cout << "Ok its Saturday"; } 这给了我一个编译错误: 错误:“。”之前的预期主表达式 代币 所以要明确一点,说之间有什么区别? if (day == Days.Saturday) // Causes compilation error 和 if (day == Saturday) ? 这两个实际上指的是什么,一个可以确定,一个会导致编译错误?
218 c++  enums 

3
为什么转置512x512的矩阵要比转置513x513的矩阵慢得多?
在对不同大小的正方形矩阵进行了一些实验之后,出现了一个模式。不变地,转置大小矩阵2^n比转置size 慢2^n+1。对于的较小值n,差异不大。 但是,相差超过512。(至少对我而言) 免责声明:我知道由于元素的两次交换,该函数实际上并未转置矩阵,但没有区别。 遵循代码: #define SAMPLES 1000 #define MATSIZE 512 #include <time.h> #include <iostream> int mat[MATSIZE][MATSIZE]; void transpose() { for ( int i = 0 ; i < MATSIZE ; i++ ) for ( int j = 0 ; j < MATSIZE ; j++ ) { int aux = …

2
为什么不能将unique_ptr推回向量中?
该程序有什么问题? #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } 错误: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* …


4
为什么这个if语句结合赋值和相等性检查返回true?
我一直在思考一些初学者的错误,最后我得到了if声明中的错误。我对此扩展了一些代码: int i = 0; if (i = 1 && i == 0) { std::cout << i; } 我已经看到if语句返回真实的,它cout的i作为1。如果在if语句中i分配1了if,为什么i == 0返回true?
216 c++  if-statement 

3
为什么函数指针定义可以使用任意数量的“&”或星号“ *”?
为什么要进行以下工作? void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() = **********************foo; (*p1_foo)(); (*p2_foo)(); (*p3_foo)(); (*p4_foo)(); (*p5_foo)(); (*p6_foo)(); (*p7_foo)(); }
216 c++  c  function-pointers 

15
C ++排序和跟踪索引
我希望使用C ++和希望的标准库,以升序对样本序列进行排序,但是我也想记住新样本的原始索引。 例如,我有一个样本集,向量或矩阵A : [5, 2, 1, 4, 3]。我想将它们排序为 B : [1,2,3,4,5],但我也想记住这些值的原始索引,因此我可以得到另一个集合,该集合将是: C : [2, 1, 4, 3, 0 ]-对应于原始元素“ B”中每个元素的索引。一个'。 例如,在Matlab中,您可以执行以下操作: [a,b]=sort([5, 8, 7]) a = 5 7 8 b = 1 3 2 谁能看到一个很好的方法来做到这一点?
216 c++  sorting  stl  indexing 

6
make_unique和完美的转发
为什么std::make_unique标准C ++ 11库中没有功能模板?我发现 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 有点冗长。以下内容会更好吗? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); 这new很好地隐藏了,只提及了一次类型。 无论如何,这是我尝试实现的make_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } 我花了很std::forward长时间才可以编译这些东西,但是我不确定它是否正确。是吗?到底是什么std::forward<Args>(args)...意思?编译器如何处理?

8
什么是C ++中的前向声明?
网址:http://www.learncpp.com/cpp-tutorial/19-header-files/ 提到以下内容: add.cpp: int add(int x, int y) { return x + y; } main.cpp: #include <iostream> int add(int x, int y); // forward declaration using function prototype int main() { using namespace std; cout << "The sum of 3 and 4 is " << add(3, 4) << endl; return …

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.