Tag: C#的

如何创build.NET软件的试用版本?

Visual Studio是否具有用于创build试用版软件的内置工具? 如果没有什么工具可以完成这项工作? 在.NET平台上创build试用版本的最佳实践是什么? 这些实践如何依赖于应用程序types(Web应用程序,Windows Forms应用程序,DLL等)?

当decltype应用于它们时,哪些expression式产生引用types?

我正在阅读C ++ Primer,当expression式产生一个对象types,并产生一个对象的引用types时,我不太明白。 我引用这本书: 当我们将decltype应用于不是variables的expression式时,我们得到expression式产生的types。 一般来说,decltype会返回一个expression式的引用types,这些expression式会产生可以位于赋值左侧的对象。 考虑下面的代码: int i = 3, *ptr = &i, &ref = i; decltype(ref + 0) j; 在上面的代码中,expression式“ref + 0”产生了ref引用的对象的值i和0的附加值的固有操作。因此,按照第一个规则,expression式产生一个inttypes。 但是按照第二条规则,因为expression式产生了一个可以站在赋值左边的对象的types(在本例中为int),decltype不应该产生一个int(int&)types的引用吗? 这本书还说,下面的代码 decltype(*ptr) k; k的types是int&而不是int,expression式的结果types。 它还表示,像下面的代码中的分配expression式 decltype(a = b) l; l将在赋值操作的左侧具有对象的引用types。 我们如何知道哪些expression式产生对象types,哪些产生对对象types的引用?

内存分配char *和char

这两者在内存分配方面有什么区别? char *p1 = "hello"; char p2[] = "hello";

在函数中返回大对象

比较以下两段代码,第一段使用对大对象的引用,第二段使用大对象作为返回值。 强调“大对象”是指不必要地重复复制对象浪费周期。 使用对大对象的引用: void getObjData( LargeObj& a ) { a.reset() ; a.fillWithData() ; } int main() { LargeObj a ; getObjData( a ) ; } 使用大对象作为返回值: LargeObj getObjData() { LargeObj a ; a.fillWithData() ; return a ; } int main() { LargeObj a = getObjData() ; } 代码的第一部分不需要复制大对象。 在第二个代码片段中,该对象是在函数内部创build的,所以通常在返回对象时需要一个副本。 然而,在这种情况下,在main()中声明了对象。 编译器是否会首先创build一个默认构造的对象,然后复制getObjData()返回的对象,还是会像第一个片段一样高效? 我认为第二个片段更容易阅读,但恐怕效率不高。 编辑:通常情况下,我正在考虑的情况LargeObj是generics容器类,为了参数的缘故,其中包含成千上万的对象。 例如, typedef […]

什么是dynamic初始化对象在C + +?

什么是在c + +中的对象的dynamic初始化? 请用一个简单的例子来解释…

告诉gcc具体展开一个循环

我如何告诉GCC展开一个特定的循环? 我已经使用CUDA SDK,可以使用#pragma unroll手动展开循环。 gcc有类似的function吗? 我GOOGLE了一下,但找不到任何东西。

将字符数字转换为C中相应的整数

有没有办法将字符转换为C中的整数? 例如,从'5'到5?

什么是静态构造函数?

这个问题在采访中被问到: 什么是静态构造函数? 它存在于C ++吗? 如果是,请举例说明。

何时使用C中的位域?

在“为什么我们需要使用位域”的问题上,Google发现位域用于标志。 现在我好奇,是实际使用位场的唯一方法吗? 我们是否需要使用位域来节省空间? 从书中定义位域的方法: struct { unsigned int is_keyword : 1; unsigned int is_extern : 1; unsigned int is_static : 1; } flags; 为什么我们使用int? 占用了多less空间? 我很困惑,为什么我们使用int,但不小于或小于int的smith。 据我所知只有1位被占用在内存中,但不是整个无符号整型值。 这是对的吗?

std :: vector *在增长容量时有移动对象吗? 或者,分配器可以“重新分配”吗?

另外一个问题启发了以下想法: std::vector<T>在增加容量时必须移动所有元素吗? 据我所知,标准的行为是为底层的分配器请求新的大小的整个块,然后移动所有旧的元素,然后销毁旧的元素,然后释放旧的内存。 这种行为似乎是给定标准分配器接口的唯一可能的正确解决scheme。 但是我想知道,修改allocator来提供一个reallocate(std::size_t)函数会返回一个pair<pointer, bool>并且可以映射到底层的realloc()吗? 这样做的好处是,如果操作系统实际上只能扩展分配的内存,那么根本不会有任何移动。 布尔值将指示内存是否已移动。 ( std::realloc()可能不是最好的select,因为如果我们不能扩展,我们不需要复制数据,所以实际上我们想要的东西就像extend_or_malloc_new() 。 编辑:也许是一个is_pod -trait-基于规则的专业化将允许我们使用实际的realloc ,包括它的按位副本,只是不一般。) 这似乎是一个错过的机会。 最糟糕的情况是,你总是可以实现reallocate(size_t n)作为return make_pair(allocate(n), true); ,所以不会有任何处罚。 是否有任何问题,使这个function不适合或不适合的C + +? 也许唯一可以利用这个的容器是std::vector ,但是这又是一个相当有用的容器。 更新:一个小例子来澄清。 当前resize() : pointer p = alloc.allocate(new_size); for (size_t i = 0; i != old_size; ++i) { alloc.construct(p + i, T(std::move(buf[i]))) alloc.destroy(buf[i]); } for (size_t i = old_size; i < […]