草庐IT

实际上

全部标签

c# - 调用非 void 函数而不使用其返回值。实际发生了什么?

所以,我发现了一个类似的问题here,但答案更多的是关于风格以及你是否能够做到。我的问题是,当您调用一个返回对象的非void函数但您从未分配或使用所述返回对象时,实际会发生什么?所以,少说你是否可以,因为我绝对知道你可以并且理解上面链接的另一个问题......编译器/运行时环境是做什么的?这不是特定于语言的问题,但如果您回答,请说明您所指的语言,因为行为会有所不同。 最佳答案 我相信对于C#和Java,结果最终都会在堆栈上,然后编译器会强制弹出指令忽略它。EricLippert在"Thevoidisinvariant"上的博客文章有

c++ - ifstream::rdbuf() 实际上做了什么?

我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将infile的全部内容写入outfile似乎并不直观。//Returns1iffailedand0ifsuccessfulintWriteFileContentsToNewFile(stringinFilename,stringoutFilename){ifstreaminfile(inFilename.c_str(),ios::binary);ofstreamoutfile(outFilename.c_str(),ios::binary);if(infile.is_open()&&outfile.is_open()&&infi

c++ - ifstream::rdbuf() 实际上做了什么?

我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将infile的全部内容写入outfile似乎并不直观。//Returns1iffailedand0ifsuccessfulintWriteFileContentsToNewFile(stringinFilename,stringoutFilename){ifstreaminfile(inFilename.c_str(),ios::binary);ofstreamoutfile(outFilename.c_str(),ios::binary);if(infile.is_open()&&outfile.is_open()&&infi

c++ - int *array = new int[n];这个函数实际上在做什么?

我对如何创建动态定义的数组感到困惑:int*array=newint[n];我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组int?有人愿意解释一下吗? 最佳答案 new分配存储您请求的对象/数组所需的内存量。在这种情况下,n个整数。然后指针会将地址存储到这block内存。但是要小心,这个分配的内存块在你写出来之前不会被释放delete[]array; 关于c++-int*array=newint[n];这个函数实际上在做什么?,我们在StackOve

c++ - int *array = new int[n];这个函数实际上在做什么?

我对如何创建动态定义的数组感到困惑:int*array=newint[n];我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组int?有人愿意解释一下吗? 最佳答案 new分配存储您请求的对象/数组所需的内存量。在这种情况下,n个整数。然后指针会将地址存储到这block内存。但是要小心,这个分配的内存块在你写出来之前不会被释放delete[]array; 关于c++-int*array=newint[n];这个函数实际上在做什么?,我们在StackOve

c++ - 如何在 C++ 中确定运行时的实际对象类型;

假设我们有一个类层次结构。在底部我们有Base和在顶部Derived。即使转换为基类指针,如何确定对象类。Base*b=newDerived():typeid(b).name();//iwantthistotellmethatthisisactuallyderivednotbaseobject除了手动实现字符串字段或类似的虚拟获取功能之外,还有其他方法吗?PS:我说的是独立于编译器的解决方案 最佳答案 确保基类至少有一个虚方法,包括并使用您当前的代码,只需额外取消引用typeid(*b).name().顺便提一下,typeidcal

c++ - 如何在 C++ 中确定运行时的实际对象类型;

假设我们有一个类层次结构。在底部我们有Base和在顶部Derived。即使转换为基类指针,如何确定对象类。Base*b=newDerived():typeid(b).name();//iwantthistotellmethatthisisactuallyderivednotbaseobject除了手动实现字符串字段或类似的虚拟获取功能之外,还有其他方法吗?PS:我说的是独立于编译器的解决方案 最佳答案 确保基类至少有一个虚方法,包括并使用您当前的代码,只需额外取消引用typeid(*b).name().顺便提一下,typeidcal

c++ - glm::ortho() 实际上是错误的吗?

我最近认为从OpenGL提供的旧(已弃用)功能(例如矩阵运算和固定函数管道)切换是个好主意。我使用GLM作为我的矩阵库来简化一些事情。问题是它可能导致的问题比简化的要多...透视投影在我的着色器和设置中运行良好,但是当我尝试切换到正交时,一切都崩溃了。我的点和简单的四边形不会显示。当我使用旧的OpenGL矩阵时,事情又开始工作了。我将范围缩小到投影矩阵。我是这样调用它的:glm::mat4projMat=glm::ortho(0,400,0,400,-1,1);我将它与opengl一旦调用时提供的比较"glOrtho(0,400,0,400,-1,1);唯一的区别是[0][0]元素和[

c++ - glm::ortho() 实际上是错误的吗?

我最近认为从OpenGL提供的旧(已弃用)功能(例如矩阵运算和固定函数管道)切换是个好主意。我使用GLM作为我的矩阵库来简化一些事情。问题是它可能导致的问题比简化的要多...透视投影在我的着色器和设置中运行良好,但是当我尝试切换到正交时,一切都崩溃了。我的点和简单的四边形不会显示。当我使用旧的OpenGL矩阵时,事情又开始工作了。我将范围缩小到投影矩阵。我是这样调用它的:glm::mat4projMat=glm::ortho(0,400,0,400,-1,1);我将它与opengl一旦调用时提供的比较"glOrtho(0,400,0,400,-1,1);唯一的区别是[0][0]元素和[

c++ - 为什么 std::remove_copy_if() 不实际删除?

这可能是STL中命名最差的函数吗?(反问)std::remove_copy_if()实际上似乎没有进行任何删除。据我所知,它的行为更像是copy_if_not。否定有点令人困惑,但可以使用std::not1()解决,但是我可能会误解一些东西,因为我无法理解这个函数与删除有什么关系-我错过了什么吗?如果没有,是否有STL算法用于有条件地从容器中移除(移动?)元素并将它们放入另一个容器中?编辑以添加示例,以免读者感到困惑。以下程序似乎未触及输入范围(V1):#include#include#include#includeusingstd::cout;usingstd::endl;intma