Questions tagged «c++»

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

7
如何将向量传递给函数?
我正在尝试将向量作为函数的参数发送,但我不知道如何使它起作用。尝试了多种方法,但是它们都给出了不同的错误消息。我只包括部分代码,因为只有这部分不起作用。(向量“随机”填充有0到200之间的随机但已排序的值) 更新了代码: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using namespace std; int binarySearch(int first, int last, int search4, vector<int>& random); int main() { vector<int> random(100); int search4, found; int first = 0; int last = 99; found = binarySearch(first, last, search4, random); system("pause"); return(0); } int binarySearch(int first, …
85 c++  function  vector 

13
C ++ volatile关键字是否引入了内存屏障?
我了解这会volatile告知编译器该值可能会更改,但是为了完成此功能,编译器是否需要引入内存隔离墙以使其起作用? 据我了解,对易失对象的操作顺序不能重新排序,必须保留。这似乎意味着需要一些内存隔离,并且实际上没有解决方法。我说的对吗? 有关这个问题有一个有趣的讨论 乔纳森·韦克利(Jonathan Wakely)写道: ...对不同的volatile变量的访问,只要它们出现在单独的完整表达式中,就无法重新排序...对,volatile对于线程安全性是无用的,但并非出于其给出的原因。这不是因为编译器可能会重新排列对易失性对象的访问,而是因为CPU可能会重新排列对易失性对象的访问。原子操作和内存屏障可防止编译器和CPU重新排序 到大卫·施瓦茨回答的评论: 从C ++标准的角度来看,在编译器执行某些操作和编译器发出导致硬件执行某些操作的指令之间没有区别。如果CPU可以重新排序对易失性的访问,则该标准不需要保留其顺序。... ... C ++标准对重新排序没有任何区别。而且您不能说CPU可以对它们进行重新排序而不会产生可观察的效果,所以没关系-C ++标准将它们的顺序定义为可观察的。如果编译器生成使平台执行标准要求的代码,则它符合平台上的C ++标准。如果该标准要求对挥发物的访问不进行重新排序,那么重新排序它们的平台将不兼容。... 我的观点是,如果C ++标准禁止编译器对不同的volatile进行重新排序,那么从理论上讲,此类访问的顺序是程序可观察到的行为的一部分,那么它还要求编译器发出禁止CPU执行的代码所以。该标准没有区分编译器做什么和编译器生成的代码使CPU做什么。 哪个产生两个问题:它们中的一个是“正确的”吗?实际的实现实际上是做什么的?

5
有符号/无符号比较
我试图理解为什么以下代码没有在指定的位置发出警告。 //from limits.h #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ /* = 0x7fffffff */ int a = INT_MAX; //_int64 a = INT_MAX; // makes all warnings go away unsigned int b = UINT_MAX; bool c = false; if(a < …

6
获取std :: ifstream处理LF,CR和CRLF?
我特别感兴趣istream& getline ( istream& is, string& str );。ifstream构造函数是否可以选择告诉其将所有换行编码转换为'\ n'?我希望能够打电话getline并让它优雅地处理所有行尾。 更新:澄清一下,我希望能够编写几乎可以在任何地方编译的代码,并且可以从几乎任何地方获取输入。包括带有'\ r'而不带有'\ n'的稀有文件。最大限度地减少软件用户的不便。 解决该问题很容易,但是我仍然对标准中灵活处理所有文本文件格式的正确方法感到好奇。 getline将一个完整的行读取到一个字符串中,直到一个“ \ n”。'\ n'是从流中使用的,但是getline不在字符串中包含它。到目前为止还可以,但是在包含在字符串中的“ \ n”之前可能有一个“ \ r”。 有三种类型的行结尾的文本文件中看到:“\ n”是在Unix机器上,“\ r”的传统结局是在旧的Mac操作系统使用,Windows使用一对,“\ r”(我认为)后跟“ \ n”。 问题在于,getline将'\ r'留在字符串的末尾。 ifstream f("a_text_file_of_unknown_origin"); string line; getline(f, line); if(!f.fail()) { // a non-empty line was read // BUT, there might be an '\r' …
85 c++  ifstream  newline 


4
C ++ 11 thread_local变量是否自动静态?
这两个代码段之间是否有区别: void f() { thread_local vector<int> V; V.clear(); ... // use V as a temporary variable } 和 void f() { static thread_local vector<int> V; V.clear(); ... // use V as a temporary variable } 背景知识:最初,我有一个STATIC向量V(用于保存一些中间值,每次输入函数时都会清除它)和一个单线程程序。我想将程序变成一个多线程程序,因此我必须摆脱这种静态修饰符。我的想法是将每个静态变量都转换为thread_local,而不用担心其他事情?这种做法会适得其反吗?

8
缩小C ++ 0x中的转换。仅仅是我,还是听起来像是一个巨大的变化?
C ++ 0x将使下面的代码和类似的代码格式错误,因为它需要a到a的所谓缩小转换。doubleint int a[] = { 1.0 }; 我想知道在现实世界的代码中是否经常使用这种初始化。此更改将破坏多少代码?如果您的代码受到影响,是否需要花费很多精力在代码中进行修复? 供参考,请参阅n3225的8.5.4 / 6 缩小转换是隐式转换 从浮点类型到整数类型,或者 从long double到double或float,或者从double到float,除非源是一个常量表达式,并且转换后的实际值在可以表示的值范围内(即使不能准确表示),或者 从整数类型或非作用域枚举类型到浮点类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在转换回原始类型时会产生原始值,或者 从整数类型或无作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在出现以下情况时产生原始值转换回原始类型。

10
有没有一种优雅而又快速的方法来测试整数中的1位是否在连续区域中?
我需要测试位值1的位置(对于32位整数,从0到31)是否形成连续区域。例如: 00111111000000000000000000000000 is contiguous 00111111000000000000000011000000 is not contiguous 我希望此测试(即某些功能has_contiguous_one_bits(int))具有可移植性。 一种明显的方法是遍历位置以找到第一个置位,然后找到第一个非置位并检查是否还有其他置位。 我想知道是否存在更快的方法?如果有快速的方法来找到最高和最低的设置位(但是从这个问题看来似乎没有任何可移植的位),那么可能的实现方法是 bool has_contiguous_one_bits(int val) { auto h = highest_set_bit(val); auto l = lowest_set_bit(val); return val == (((1 << (h-l+1))-1)<<l); } 只是为了好玩,这是带有连续位的前100个整数: 0 1 2 3 4 6 7 8 12 14 15 16 24 28 30 31 32 48 56 …

5
C#等效于C ++向量,具有连续内存?
什么是C ++向量的C#等价物? 我正在搜索此功能: 拥有一个连续存储的动态数组,与标准数组相比,其访问性能不会受到影响。 我正在搜索,他们说.NET equivalent to the vector in C++ is the ArrayList,所以: ArrayList是否具有该连续内存功能?
85 c#  c++  vector 



11
从文件名获取目录名称
我有一个文件名(C:\ folder \ foo.txt),我需要在非托管C ++中检索文件夹名称(C:\ folder)。在C#中,我将执行以下操作: string folder = new FileInfo("C:\folder\foo.txt").DirectoryName; 有没有可以在非托管C ++中使用的函数来从文件名中提取路径?
85 c++  file  directory 

8
C ++中是否有“字节”数据类型?
如果存在,是否包含头文件? 这段代码给出了编译错误: #include <iostream> using namespace std; int main() { byte b = 2; cout << b << endl; return 0; }
85 c++ 

11
x + =比x = x + a快吗?
我正在阅读Stroustrup的“ C ++编程语言”,他说在两种向变量添加内容的方法中 x = x + a; 和 x += a; 他喜欢,+=因为它很可能会更好地实施。我认为他的意思是它的运行速度也更快。 但是真的吗?如果它取决于编译器和其他因素,如何检查?

4
连接字符串无法按预期工作[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我知道这是一个常见问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案。 考虑以下代码: #include <string> // ... // in a method std::string a = "Hello "; std::string b = "World"; std::string c = a + b; 编译器告诉我找不到的重载运算符char[dim]。 这是否意味着字符串中没有+运算符? 但在几个示例中,会出现这种情况。如果这不是连接更多字符串的正确方法,最好的方法是什么?

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.