Questions tagged «c++»

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

24
如何在一行上连接多个C ++字符串?
C#具有语法功能,您可以在一行中将许多数据类型连接在一起。 string s = new String(); s += "Hello world, " + myInt + niceToSeeYouString; s += someChar1 + interestingDecimal + someChar2; 在C ++中相当于什么?据我所知,您必须在单独的行上完成所有操作,因为它不支持使用+运算符的多个字符串/变量。可以,但是看起来不那么整洁。 string s; s += "Hello world, " + "nice to see you, " + "or not."; 上面的代码产生一个错误。

11
如何在C ++中生成随机数?
我正在尝试使用骰子制作游戏,并且需要在其中包含随机数(以模拟骰子的侧面。我知道如何在1到6之间进行游戏)。使用 #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand((unsigned)time(0)); int i; i = (rand()%6)+1; cout << i << "\n"; } 效果不是很好,因为当我几次运行程序时,得到的输出是: 6 1 1 1 1 1 2 2 2 2 5 2 所以我想要一个命令,每次都会生成一个不同的随机数,而不是连续5次生成相同的随机数。有命令可以做到这一点吗?
150 c++  random 

19
为什么类型总是不管大小而定大小?
类型的实际大小之间的实现可能有所不同,但是在大多数情况下,像unsigned int和float这样的类型始终为4个字节。但是,为什么一个类型无论其值如何总是占用一定数量的内存?例如,如果我创建了以下值为255的整数 int myInt = 255; 然后myInt将占用我的编译器4个字节。但是,实际值255只能用1个字节表示,那么为什么myInt不只占用1个字节的内存呢?还是更普遍的询问方式:当表示值所需的空间可能小于该大小时,为什么一个类型仅与该大小相关联?
149 c++ 

5
哪些C ++编译器进行尾递归优化?
在我看来,在C和C ++中执行尾递归优化将非常有效,但是在调试时,我似乎从未看到指示这种优化的帧堆栈。这很好,因为堆栈告诉我递归的深度。但是,优化也会很好。 是否有任何C ++编译器都进行了此优化?为什么?为什么不? 如何告诉编译器执行此操作? 对于MSVC:/O2或/Ox 对于海湾合作委员会:-O2或-O3 在某些情况下,检查编译器是否已执行此操作呢? 对于MSVC,启用PDB输出以能够跟踪代码,然后检查代码 对于海湾合作委员会..? 我仍然会建议如何确定某个函数是否通过编译器进行了优化(即使我放心Konrad告诉我假设也是如此)。 总是可以通过进行无限递归检查编译器是否完全做到了这一点,并检查它是否导致无限循环或堆栈溢出(我用GCC这样做并发现-O2足够了),但是我想能够检查某个我知道会终止的功能。我希望有一个简单的方法来检查这个:) 经过一些测试,我发现析构函数破坏了进行此优化的可能性。有时更改某些变量和临时变量的范围以确保它们在返回语句开始之前超出范围是值得的。 如果在尾调用之后需要运行任何析构函数,则无法完成尾调用优化。

12
为什么x [0]!= x [0] [0]!= x [0] [0] [0]?
我正在学习一些C ++,并且正在与指针作斗争。我知道我可以通过声明以下三个级别的指针: int *(*x)[5]; 因此,这*x是指向5个元素的数组的指针,这些数组是的指针int。我也知道x[0] = *(x+0);,x[1] = *(x+1)等等。 那么,鉴于上述声明,为什么x[0] != x[0][0] != x[0][0][0]?
149 c++  c  arrays  pointers 

17
const指针的意义是什么?
我不是在谈论const值的指针,而是const指针本身。 我在学习C和C ++的基础知识之外,直到今天,我才意识到指针是通过值传递给函数的,这很有意义。这意味着在函数内部,我可以使复制的指针指向其他某个值,而不会影响调用者的原始指针。 那么,有一个函数标头说: void foo(int* const ptr); 在这样的函数中,您不能使ptr指向其他东西,因为它是const并且您不希望对其进行修改,而是这样的函数: void foo(int* ptr); 工作也一样!因为无论如何都会复制指针,并且即使您修改了副本,调用者中的指针也不会受到影响。那么const的优点是什么?
149 c++  c  pointers  const 

18
删除指针后将其设为NULL是一种好习惯吗?
我首先要说的是,使用智能指针,您将永远不必为此担心。 以下代码有什么问题? Foo * p = new Foo; // (use p) delete p; p = NULL; 这是由另一个问题的答案和评论引起的。尼尔·巴特沃思(Neil Butterworth)的一则评论产生了一些反对意见: 在C ++中,删除后将指针设置为NULL并不是普遍的好习惯。有时候,这是一件好事,有时却是毫无意义的,并且会掩盖错误。 在很多情况下它无济于事。但是以我的经验,这不会伤害。有人启发我。

2
静态const与const的C ++语义
具体来说,在C ++中,例如之间的语义差异是什么: static const int x = 0 ; 和 const int x = 0 ; 同时static用作链接和存储类说明符(即函数内部和外部)。
149 c++ 

14
为什么引用数组不合法?
以下代码无法编译。 int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8}; C ++标准对此有何说法? 我知道我可以声明一个包含引用的类,然后创建该类的数组,如下所示。但是我真的很想知道为什么上面的代码无法编译。 struct cintref { cintref(const int & ref) : ref(ref) {} operator const int &() { return ref; } private: const int & ref; void operator=(const cintref &); }; int main() { int …
149 c++  arrays  reference 

8
将Python程序转换为C / C ++代码?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 是否可以将Python程序转换为C / C ++? 我需要实现一些算法,而且我不确定性能差距是否足够大,足以证明我在C / C ++中做的所有痛苦(我不擅长)。我考虑过要编写一个简单的算法,并针对这种转换后的解决方案进行基准测试。如果仅此一项比Python版本要快得多,那么除了在C / C ++中做到这一点,我别无选择。
149 c++  python  c  code-generation 

5
为什么增强的GCC 6优化器会破坏实用的C ++代码?
GCC 6具有新的优化程序功能:假定该this值始终不为null并基于此进行优化。 现在,值范围传播假定C ++成员函数的this指针为非null。这消除了常见的空指针检查,但也破坏了一些不合格的代码库(例如Qt-5,Chromium,KDevelop)。作为临时解决方法,可以使用-fno-delete-null-pointer-checks。使用-fsanitize = undefined可以识别错误的代码。 变更文档显然将此称为危险,因为它破坏了数量惊人的频繁使用的代码。 为什么这个新假设会破坏实用的C ++代码?粗心或不了解信息的程序员是否有特定的模式依赖于这种特定的未定义行为?我无法想象有人写作,if (this == NULL)因为那太不自然了。

2
void_t如何工作
我观看了Walter Brown在Cppcon14上有关现代模板编程的演讲(第一部分,第二部分),他介绍了他的void_tSFINAE技术。 示例: 给定一个简单的变量模板,该模板评估void所有模板参数是否格式正确: template< class ... > using void_t = void; 以及以下特征来检查是否存在称为member的成员变量: template< class , class = void > struct has_member : std::false_type { }; // specialized as has_member< T , void > or discarded (sfinae) template< class T > struct has_member< T , void_t< decltype( T::member ) > …
148 c++  templates  c++14  sfinae 

9
提取文本OpenCV
我试图在图像中找到文本的边界框,并且目前正在使用这种方法: // calculate the local variances of the grayscale image Mat t_mean, t_mean_2; Mat grayF; outImg_gray.convertTo(grayF, CV_32F); int winSize = 35; blur(grayF, t_mean, cv::Size(winSize,winSize)); blur(grayF.mul(grayF), t_mean_2, cv::Size(winSize,winSize)); Mat varMat = t_mean_2 - t_mean.mul(t_mean); varMat.convertTo(varMat, CV_8U); // threshold the high variance regions Mat varMatRegions = varMat > 100; 当给出这样的图像时: 然后当我显示varMatRegions我得到此图像: 如您所见,它在某种程度上将文本的左侧部分与卡的标题结合在一起,对于大多数卡而言,此方法效果很好,但在繁忙的卡上会引起问题。 …

3
类模板中的静态成员初始化
我想这样做: template <typename T> struct S { ... static double something_relevant = 1.5; }; 但是我不能,因为something_relevant它不是整数类型。它不依赖T,但是现有的代码取决于它是的静态成员S。 由于S是模板,因此无法将定义放入编译文件中。我该如何解决这个问题?
148 c++  templates  static 


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.