随笔分类 - C++学习笔记
摘要:QTableWidget的行高随整个空间而放大缩小,想要设置行高为固定值不起作用。 原因:设置了垂直表头的缩放模式,即pTableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); 将这句话去掉即可。
阅读全文
摘要:如果布局器设置了对齐方式,那么很可能会出现其中的控件不能自动放大到填充整个布局器的现象,因此应该慎重使用。
阅读全文
摘要:QSplitter设置setStretchFactor比例因子,当其中的QWidget对象存在布局器时,比例因子设置失效,在网上找了很多解决方案,大多数是通过设置SizePolicy来解决,但也都不起作用。其实,官方文档中有说明,设置这个比例因子并不能决定实际的窗体大小,实际窗体大小为窗体的初始大小
阅读全文
摘要:QTableWidget的单元格如果要显示其他控件,可以使用setCellWidget,但是控件没有居中,要想使控件居中,可以先创建一个QWidget对象,并设置布局器,然后将控件放到布局器中,并把这个QWidget对象放到单元格内,但是此时若要设置单元格的背景颜色,QTableWidget只能通过
阅读全文
摘要:C++编译器对待引用的处理是以指针形式实现,对于内置类型(如int)、STL和函数对象以值传参更高效,对于自定义类以引用传参更高效。 而对于函数的返回值则应该为值,不能返回引用,原因是在函数结束后局部变量被回收,引用为空。
阅读全文
摘要:void f(int i,std::string const& s);void not_oops(int some_param){ char buffer[1024]; sprintf(buffer,"%i",some_param); std::thread t(f,3,buffer); t.det
阅读全文
摘要:#include <Thread> void func() {doSomthing();} void main() { std::Thread my_thread(func); my_thread.detach(); } 1、如上所示:通过Thread对象启动一个新线程时,如果调用detach()则
阅读全文
摘要:1、迭代器令算法不依赖于容器,但算法依赖于元素类型的操作。 2、算法可能改变容器中保存元素的值,也可能在容器内移动元素,但永远不会直接添加或删除元素。 3、那些只接受一个迭代器来表示第二个序列的算法,都假定第二个序列至少与第一个序列一样长。 4、如果lambda的函数体包含任何单一return语句之
阅读全文
摘要:1、为了创建一个容器为另一个容器的拷贝,两个容器的类型及其元素类型必须匹配。不过,当传递迭代器参数来拷贝一个范围时,就不要求容器类型是相同的了。而且新容器和原容器中的元素类型也可以不同,只要能将要拷贝的元素转换为要初始化的容器中的元素类型即可。 2、与内置数组不同,标准库array类型允许赋值,赋值
阅读全文
摘要:1、IO对象无拷贝或赋值,因此我们也不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象通常会改变其状态,因此传递和返回的引用不能是const的。 2、由于流可能处于错误状态,因此代码通常应该在使用一个流之前检查它是否处于良好状态。将流当做条件使用的代码等
阅读全文
摘要:1、取地址符作用于一个左值运算对象,返回一个指向该左值运算对象的指针,这个指针是一个右值。 2、如果表达式的求值结果是左值,decltype作用于该表达式(不是变量)得到一个引用类型,例如,假设p的类型是int *,由于解引用运算符返回左值,那么decltype(*p)得到的类型是int &。另一方
阅读全文
摘要:1、类内的成员函数都有一个隐式的形参this指针,在通过对象调用成员函数时,将当前对象的地址作为实参传递给this。因为this的目的总是指向“这个”对象,所以this是一个常量指针,不允许改变this中保存的地址。 2、默认情况下,this的类型是指向类类型非常量版本的常量指针。例如,在Sales
阅读全文
摘要:1、由于变量初始化时会忽略顶层const,函数参数也是如此,因此,void f(int i)和void f(const int i),是两个相同的函数,并不构成重载。 2、把函数不会改变的形参定义成(普通的)引用是一种比较常见的错误,这么做带给函数的调用者一种误导,即函数可以修改它的实参的值。此外,
阅读全文
摘要:1、用auto通过数组名字获取到的类型是指针,用decltype通过数组名字获取到的类型是数组类型。 2、用部分数组初始化vector,表示范围的数组指针与迭代器类似,第一个指针指向第一个元素,第二个指针表示最后一个元素的后一位置。 3、要是用范围for语句处理多维数组,除了最内层的循环外,其他所有
阅读全文
摘要:1、对vector的初始化方式可以是列表初始化,也可以是直接初始化,当用圆括号()时,表示直接初始化,当用花括号{}时,可能是列表初始化也可能是直接初始化,可以根据花括号里的内容判定是哪一种情况。优先被判定为列表初始化。 2、如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for
阅读全文
摘要:1、getline函数遇到换行符结束读取,换行符也被读了进来,但是并不把换行符赋值给字符串对象。 2、调用字符串类提供的运算符时,可以把字符串字面值常量和字符字面值常量隐式转换为字符串类型的变量,然后执行运算符运算,但是要确保参与运算的量至少有一个是字符串变量,比如:string s = "hell
阅读全文
摘要:1、如果使用等号(=)初始化一个变量,那么实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不适用等号,则执行的是直接初始化。 2、当初始值只有一个时,使用拷贝初始化和直接初始化都行,如果初始化要用到的值有多个,则只能使用直接初始化。 3、当初始值有多个时,如果
阅读全文
摘要:1、对于数组的元素不能用auto来定义,数组元素类型不能是引用类型。 2、分析数组的类型不适合从右往左的方式,应该用从内到外的方式,即从数组的名字开始,按照由内向外的方式阅读。例如:int (*parray)[10] = &arr;先读括号内的内容知道parray是一个指针,再读括号外右侧的内容知道
阅读全文
摘要:1、用auto修饰符定义的变量根据其初始值由编译器自动判断变量类型,但会忽略顶层const,例如:const int ci;auto a = ci;此时a的类型是int,而不是const int,如果希望通过auto定义const类型,则需要特殊说明,const auto a = ci;此时a为co
阅读全文