草庐IT

language-design

全部标签

c++ - 为什么允许 T() = T()?

我相信表达式T()创建了一个右值(按标准)。但是,以下代码可以编译(至少在gcc4.0上):classT{};intmain(){T()=T();}我知道从技术上讲这是可能的,因为可以在临时对象上调用成员函数,而上面只是在从第一个T()创建的右值临时对象上调用operator=。但从概念上讲,这就像为右值分配一个新值。是否有充分的理由允许这样做?编辑:我觉得这很奇怪的原因是它在内置类型上是严格禁止的,而在用户定义类型上却是允许的。例如,int(2)=int(3)不会编译,因为这是“赋值中的无效左值”。所以我想真正的问题是,这种在语言中内置的有些不一致的行为是有原因的吗?还是出于某种历史

c++ - 当 auto 用于数组时,为什么它被转换为指针而不是引用?

请看下面的例子:intarr[10];int*p=arr;//1stvalidchoiceint(&r)[10]=arr;//2ndvalidchoice现在当我们对arr使用auto时,它会选择第一个选项。autox=arr;//xisequivalentto*pchoosingapointerandnotreference有什么原因吗?对于数组? 最佳答案 是的。在该表达式中,由于lvalue-to-rvalue转换,数组衰减为指针类型。如果你想要array类型,而不是pointer类型,那么这样做:auto&x=arr;//n

c++ - 当 auto 用于数组时,为什么它被转换为指针而不是引用?

请看下面的例子:intarr[10];int*p=arr;//1stvalidchoiceint(&r)[10]=arr;//2ndvalidchoice现在当我们对arr使用auto时,它会选择第一个选项。autox=arr;//xisequivalentto*pchoosingapointerandnotreference有什么原因吗?对于数组? 最佳答案 是的。在该表达式中,由于lvalue-to-rvalue转换,数组衰减为指针类型。如果你想要array类型,而不是pointer类型,那么这样做:auto&x=arr;//n

c++ - C++ 不能消除 pimpl 成语吗?

据我了解,pimpl习语之所以存在只是因为C++强制您将所有私有(private)类成员放在标题中。如果header仅包含公共(public)接口(interface),理论上,类实现的任何更改都不需要重新编译程序的其余部分。我想知道的是为什么C++的设计不是为了提供这样的便利。为什么它要求一个类的私有(private)部分在标题中公开显示(不是双关语)? 最佳答案 我认为这里存在混淆。问题不在于标题。header没有任何作用(它们只是在多个源代码文件中包含源文本的公共(public)位的方法)。问题在于,C++中的类声明必须定义实

c++ - C++ 不能消除 pimpl 成语吗?

据我了解,pimpl习语之所以存在只是因为C++强制您将所有私有(private)类成员放在标题中。如果header仅包含公共(public)接口(interface),理论上,类实现的任何更改都不需要重新编译程序的其余部分。我想知道的是为什么C++的设计不是为了提供这样的便利。为什么它要求一个类的私有(private)部分在标题中公开显示(不是双关语)? 最佳答案 我认为这里存在混淆。问题不在于标题。header没有任何作用(它们只是在多个源代码文件中包含源文本的公共(public)位的方法)。问题在于,C++中的类声明必须定义实

c++ - 为什么 c++ 指针 * 关联到声明的变量,而不是类型?

为什么C++被设计成在同一行声明两个int*s的正确方法是int*x,*y;不是int*x,y;我知道有些人认为您应该避免使用任何一种形式并在单独的行中声明每个变量,但我对为什么做出这种语言决定很感兴趣。 最佳答案 为了保持与C代码的兼容性,因为C就是这样工作的。Bjarne提出了一个很好的观点inhisstyleandtechniquefaq:Thechoicebetweenint*p;andint*p;isnotaboutrightandwrong,butaboutstyleandemphasis.Cemphasizedexpr

c++ - 为什么 c++ 指针 * 关联到声明的变量,而不是类型?

为什么C++被设计成在同一行声明两个int*s的正确方法是int*x,*y;不是int*x,y;我知道有些人认为您应该避免使用任何一种形式并在单独的行中声明每个变量,但我对为什么做出这种语言决定很感兴趣。 最佳答案 为了保持与C代码的兼容性,因为C就是这样工作的。Bjarne提出了一个很好的观点inhisstyleandtechniquefaq:Thechoicebetweenint*p;andint*p;isnotaboutrightandwrong,butaboutstyleandemphasis.Cemphasizedexpr

c++ - 如何跟踪给定主题的较新的 C++ 标准文档?

以下是C++标准文档。文档编号是N3721,它取代了旧的N3634。显然,跟踪给定主题的旧文档很容易。但是,我的问题是:如何跟踪给定主题的较新文档?例如,如果N3721被较新的文档取代,如何跟踪较新的文档? 最佳答案 对于较新的提案(以字母P开头的提案),您可以使用wg21.linkredirectservice获取最新文档:wg21.link-WG21redirectservice.Usage:wg21.link/nXXXXwg21.link/pXXXXrXGetpaper.wg21.link/pXXXXGetlatestpubl

c++ - 如何跟踪给定主题的较新的 C++ 标准文档?

以下是C++标准文档。文档编号是N3721,它取代了旧的N3634。显然,跟踪给定主题的旧文档很容易。但是,我的问题是:如何跟踪给定主题的较新文档?例如,如果N3721被较新的文档取代,如何跟踪较新的文档? 最佳答案 对于较新的提案(以字母P开头的提案),您可以使用wg21.linkredirectservice获取最新文档:wg21.link-WG21redirectservice.Usage:wg21.link/nXXXXwg21.link/pXXXXrXGetpaper.wg21.link/pXXXXGetlatestpubl

【QT学习二】Qt Design中使用Qt的基本布局

目录概述QtDesign中使用Qt的基本布局控件在哪?怎么使用?直接拖拽布局控件使用工具栏Layout的属性概述在我们使用Qt做界面设计时,为了界面的整洁美观,往往需要对界面中的所有控件做一个有序的排列,以及设置各个控件之间的间距等等,为此Qt为界面设计提供了基本布局功能,使用基本布局可以使组件有规则地分布。基本布局控件(QLayouts)在UI界面中不会显示,只是控制其中的其它控件的相对位置。如果QtUI界面中的控件使用了布局,这些控件就会随着窗体的大小变化自动地调整大小和相应的位置。布局是可以嵌套使用的。你还可以使用QtDesign图形化地设计布局界面。也可以使用代码设计界面布局。本文从使