草庐IT

c++ - 我们可以给静态数组的大小一个变量吗

大家好,我想问一下,我读过我们只能通过使用指针和使用malloc或newlike来声明动态数组int*array=newint[strlen(argv[2])];但是我已经写过了intarray[strlen(argv[2])];没有报错我读到静态数组只能通过给常量数组大小来声明,但在这里我给静态数组一个可变大小为什么这么感谢使用它是否安全,或者是否有可能在后面的任何阶段它都会给我使用gcclinux带来问题 最佳答案 您拥有的称为可变长度数组(VLA),它不是C++的一部分,尽管它是C99的一部分。许多编译器提供此功能作为扩展。即

c++ - 二进制与文本模式下的文件操作——性能问题

在很多项目中,我看到数据对象/结构以二进制方式写入文件,然后再以二进制方式从文件中取回。我想知道为什么他们用二进制模式来做?文本模式和二进制模式之间有什么性能差异?如果不是,那么什么时候使用二进制模式或文本模式? 最佳答案 二进制更快。考虑一个以32位(4字节)存储的整数,例如123456。如果您将其写为二进制(这就是它在计算机中的表示方式),则需要4个字节(忽略项目之间的填充以便在结构中对齐)).要将数字写为文本,必须将其转换为字符串(一些转换开销和内存存储),然后将其写出,至少需要6个字节,因为有6个字符要表示号码。这不包括任何

c++ - 为什么 C++ 不使用 C++ 元素/样式重新实现 C 标准函数?

对于一个具体的例子,考虑atoi(conststd::string&)。这非常令人沮丧,因为我们作为程序员需要经常使用它。更普遍的问题是,为什么C++标准库不使用C++字符串、C++vector或其他C++标准元素重新实现标准C库,而不是保留旧的C标准库并强制我们使用旧的char*接口(interface)?它非常耗时,并且在这两个接口(interface)之间转换数据类型的代码不容易优雅。是否出于兼容的原因,考虑到遗留的C代码比现在多得多,保留这些C标准接口(interface)会使从C代码到C++的转换更容易?另外,听说很多C++可用的库对STL做了很多增强和扩展,请问有库支持这些

c++ - C 和 C++ 之间的联系有何不同?

我已经在SO上阅读了关于外部/内部链接的现有问题。我的问题是不同的-如果我在C和C++下的不同翻译单元中有多个具有外部链接的同一个变量定义会怎样?例如:/*file1.c*/typedefstructfoo{inta;intb;intc;}foo;fooxyz;/*file2.c*/typedefstructabc{doublex;}foo;fooxyz;使用Dev-C++作为C程序,上述程序编译链接完美;而如果将其编译为C++程序,则会出现多重重定义错误。为什么它应该在C下工作,与C++有什么区别?此行为是否未定义且依赖于编译器?这段代码有多“糟糕”,如果我想重构它应该怎么做(我遇到

c++ - 内部链接和无链接之间的区别

请引用以下同翻译单元的代码:staticintglobal_var;//filescopeinCandglobalnamespacescopeinC++//internallinkagevoidf(void){staticintlocal_var;//blockscopeinCandlocalscopeinC++//nolinkage}我的理解是这样的:我可以从翻译单元的任何地方引用global_var,因为它具有全局范围。我只能在函数f中引用local_var,因为它具有局部作用域。我的问题:这两个变量在链式方面有什么区别?您能否提供一个示例,说明内部和无链接会产生差异,并且差异不仅

c++ - 如何在 C++ 中大写/小写 UTF-8 字符?

假设我有一个UTF-8编码的std::string包含以下内容:óó我想将其转换为以下内容:ÓÓ理想情况下,我希望我使用的大写/小写方法在所有UTF-8中通用。如果可能的话。字符串中的原始字节序列是0xc3b3c3b3(每个字符两个字节,ó的两个实例),我希望输出为0xc393c393(Ó的两个实例)。有someexamples在StackOverflow上,但他们使用宽字符串,并且otheranswers说你不应该为UTF-8使用宽字符串。看起来这个问题可能非常“棘手”,因为输出可能取决于用户的区域设置。我原以为只使用std::toupper()之类的东西,但我真的不清楚它的用法,因

c++ - C和C++中的编译器优化和临时分配

请查看以下在C和C++中有效的代码:externintoutput;externintinput;externinterror_flag;voidfunc(void){if(0!=error_flag){output=-1;}else{output=input;}}是否允许编译器以与下面类似的方式编译上面的代码?externintoutput;externintinput;externinterror_flag;voidfunc(void){output=-1;if(0==error_flag){output=input;}}换句话说,是否允许编译器生成(从第一个片段开始)始终向out

c++ - C 风格字符串、指针、数组

我无法理解什么是C风格的字符串。新年快乐我所知道的:指针保存内存地址。取消引用指针将为您提供该内存位置的数据。intx=50;int*ptr=&x;//pointertoaninteger,holdsmemoryaddressofxcout现在我不明白的地方(使用上面的内容作为我困惑的来源):有多种方法可以声明字符串。我正在学习C++,但你也可以使用C风格的字符串(很好理解,虽然不如C++字符串)C++:stringintro="Helloworld!";//thecompilerwillautomaticallyaddanullcharacter,\0,soyoudon'thavet

c++ - c++ 中的逻辑 AND + 赋值,安全吗?

我刚刚学到了这个很棒的模式(实际上是从javascript学到的),我想将它应用到我的C++代码中。为了解释这个模式,假设我将一个字符串表示为这些的链表:structlink_char;structlink_char{link_char*next;charcode;};请注意,任何link_char字符串的最后一个字符的代码始终为==0。此属性意味着我可以检查字符串中的值,同时使用&&短路来防止NULL指针访问。boolequals_hello(constlink_char*first_char){constlink_char*c=first_char;returnc->code=='

c++ - 使程序在 "machine byte"中具有不同位数的机器之间可移植

我们都是可移植C/C++程序的爱好者。我们知道sizeof(char)或sizeof(unsignedchar)总是1“byte”。但是那个1“byte”并不意味着一个8位的字节。它只是表示一个“机器字节”,其中的位数可能因机器而异。参见thisquestion.假设您将ASCII字母“A”写入文件foo.txt。如今在任何具有8位机器字节的普通机器上,这些位将被写出:01000001但是如果您要在具有9位机器字节的机器上运行相同的代码,我想这些位会被写出:001000001更重要的是,后一种机器可以将这9位写为一个机器字节:100000000但是如果我们要在以前的机器上读取这些数据,