草庐IT

user_name_array

全部标签

c++ - array::operator[] 实际上是 noexcept 吗?

根据cppref,当前未指定重载noexcept。但我认为它们实际上是noexcept,对吧?由于不执行边界检查。所以没有像array::at这样的out_of_range异常.如果输入超出范围,就会发生低级段错误或访问冲突,这超出了C++异常范围(我猜)。 最佳答案 operator[]没有标记为noexcept的原因是它有一个“窄契约”,即要求索引值在范围内0...N-1。如果传递的值不在该范围内,则行为未定义,并且(谁知道?)函数可能会抛出异常。关于不将具有“狭义契约”的事物标记为noexcept,该标准非常一致。这被非正式地

c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?

我的问题具体是关于数组,不是对象。关于malloc()/free()与new/delete的一些问题,但它们都集中在它们使用方式的差异上。我了解它们的使用方式,但我不了解是什么根本差异导致了使用差异。我经常听到C程序员说malloc()和free()是代价高昂的操作,但我从未听C++程序员这样说新建和删除。我还注意到C++没有对应于C的realloc()的操作。如果我正在编写等同于C++的vector类,我希望在调整数组大小时避免复制整个数组,但使用new和delete你必须复制。在C中,我会简单地realloc()。值得注意的是,realloc()可能只是复制整个数组,但我的印象是它

c++ - 使用字符串数组 : arrays of pointers - Are they like multidimensional arrays?

我最近一直在阅读C++fordummies,要么书名用词不当,要么他们不指望我。在关于使用带有字符串的指针数组的部分中,他们展示了一个函数,我完全被难住了,不知道该转向哪里。char*int2month(intnMonth){//checktoseeifvalueisinrangif((nMonth12))return"invalid";//nMonthisvalid-returnthenameofthemonthchar*pszMonths[]={"invalid","January","February","March","April","May","June","July","A

c++ - getline(cin.name) 被跳过

我从C++中的一个函数调用一个函数,该函数具有getline(cin,name)行,其中name是一个字符串。第一次通过循环时,程序不等待输入。它将通过循环的所有其他传递。有什么想法吗?voidgetName(string&name){intnameLen;do{cout 最佳答案 确保自上次从cin读取内容后没有遗漏,例如:在你的程序的前面一点:intnumber;cin>>number;您提供的输入:5程序后面:getline(cin,name);和getline似乎不会被调用,而是它收集了您上次输入时的换行符,因为当您使用ci

c++ - std::vector 与 std::array 性能对比

我正在查看新的计时库(C++11)并尝试使用它。我写了以下两个程序:vector.cpp#include#include#includeintmain(){std::vectorvector(1000000,0.);autostart=std::chrono::high_resolution_clock::now();for(inti(0);i(end-start).count()数组.cpp#include#include#include#includeintmain(){std::arrayarray;std::fill(array.begin(),array.end(),0.);

c++ - 伪装的指针算术 &(array[0])

今天浏览了一些源码(是一个说明软件框架使用的示例文件),发现了很多这样的代码:int*array=newint[10];//ormalloc,whocares.Please,nolanguagewars.Thisisapplicabletobothlanguagesfor(int*ptr=&(array[0]);ptr所以基本上,他们已经完成了“获取位于地址array+x的对象的地址”。通常我会说,这简直是愚蠢,因为直接编写array+0或array+9也是一样的。我什至总是将此类代码重写为size_tfor循环,但这是风格问题。但是过度使用它让我开始思考:我是漏掉了一些显而易见的东西

c++ - 错误 "An array may not have elements of this type"

由于这个奇怪的编译错误,我在编译我的程序时遇到了问题...这是代码的具体部分://theerroroccuresat"char_adr[][]"intheconstructorparametersAddresses(string_ime,string_egn,char*_adres,char_adr[][],intadrLen):Person(_ime,_egn,_adres){addressLength=0;for(;addressLength=5){break;}adr[addressLength]=_adr[addressLength];}} 最佳答案

c++ - 使用 constexpr auto/char-array 变量观察到的不同行为

跟进这个问题Havingaconstexprstaticstringgivesalinkererror在问题中,这段代码无法编译:#includestructTest{staticconstexprchartext[]="Text";};intmain(){std::cout从评论来看,这段代码是可以编译的:#includestructTest{staticconstexprautotext="Text";};intmain(){std::cout我的问题是,为什么auto版本可以工作,而char版本的数组却不行?能否请您指出标准中允许使用第二个版本而不允许使用第一个版本的声明?我看了

c++ - '简历' : a namespace with this name does not exist while building (VS 2015, OpenCV 3.2)

在VS2015中构建一个简单的OpenCV应用程序时出现错误'cv':anamespacewiththisnamedoesnotexistwhilebuilding虽然我相信我已经完成了为VS配置OpenCV所需的所有步骤(使用本文作为引用http://opencv-srf.blogspot.com/2013/05/installing-configuring-opencv-with-vs.html)类(class)的开始很简单#include"opencv2/imgcodecs.hpp"#include"opencv2/highgui.hpp"#include"opencv2/sti

c++ - (void) sizeof (0[array]) 是什么意思?

我遇到了以下代码,它返回C样式数组的大小。templateintGetArraySize(Type(&array)[N]){(void)sizeof(0[array]);returnN;}模板部分似乎已经在thisquestion中解释过了。.但是,我仍然不明白sizeof行的用途是什么。有任何想法吗?有人建议这是为了避免未使用的变量警告,但可以使用更简单的#pragma,对吧?另外,这段代码在任何情况下都有效吗?没有任何限制吗? 最佳答案 我认为该行的目的是静默未使用的变量警告。更简单的方法是省略参数名称templateintGe