Tag: C#的

试着去了解? (空条件)运算符在C#

我有这个非常简单的例子: class Program { class A { public bool B; } static void Main() { System.Collections.ArrayList list = null; if (list?.Count > 0) { System.Console.WriteLine("Contains elements"); } A a = null; if (a?.B) { System.Console.WriteLine("Is initialized"); } } } 行if (list?.Count > 0)完全编译,这意味着如果list为null ,则默认情况下expression式Count > 0变为false 。 但是,行if (a?.B)抛出一个编译器错误,说我不能隐式转换bool? bool 。 为什么一个与另一个不同?

func()和(* this).func()在C ++中的区别

我正在使用C ++编写别人代码,并且发现了一个奇怪的调用函数func() 。 这里是一个例子: if(condition) func(); else (*this).func(); func()和(*this).func()之间有什么区别? 什么情况下调用func()和(*this).func()将执行不同的代码? 在我的情况下, func()不是一个macros。 它是基类中的一个虚函数,在基类和派生类中都有一个实现,没有自由的func() 。 if位于基类中的一个方法中。

如何判断头文件包含在哪里?

我怎么知道g ++能够find包含文件? 基本上如果我 #include <foo.h> g ++将扫描searchpath,使用任何包含选项来添加或改变path。 但是,在几天结束的时候,有没有一种方法可以告诉g ++select编译的foo.h的绝对path? 特别相关的是,如果在无数的searchpath中有多个foo.h。 有没有办法完成这个…有没有办法让g ++告诉我它的最终searchpath是什么,包括默认和所有包含选项?

为什么这是一个未定义的行为?

我对这个问题的回答是这个function: inline bool divisible15(unsigned int x) { //286331153 = (2^32 – 1) / 15 //4008636143 = (2^32) – 286331153 return x * 4008636143 <= 286331153; } 它完美的工作在我的机器上用VS2008编译器,但是在这里根本不起作用。 有没有人有一个想法,为什么我在不同的编译器上得到不同的结果? unsigned溢出不是未定义的行为。 重要提示:经过一些testing,证实它比15分的剩余部分更快(但不是所有的编译器)

枚举和常量。 哪个使用时?

我正在读取枚举,并发现它们非常类似于声明常量。 我怎么知道什么时候使用常量而不是枚举,反之亦然。 使用枚举有什么好处?

如何将一个向量传递给一个函数?

我试图发送一个向量作为参数的函数,我不知道如何使其工作。 尝试了一堆不同的方式,但他们都给出了不同的错误信息。 我只包含部分代码,因为只有这个部分不起作用。 (vector“随机”填充0到200之间的随机值,但sorting值) 更新了代码: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using namespace std; int binarySearch(int first, int last, int search4, vector<int>& random); int main() { vector<int> random(100); int search4, found; int first = 0; int last = 99; found = binarySearch(first, last, search4, random); system("pause"); return(0); } int binarySearch(int first, int last, […]

如何使用匿名方法返回值?

这失败了 string temp = () => {return "test";}; 与错误 无法将lambdaexpression式转换为“string”types,因为它不是委托types 错误意味着什么,我该如何解决?

在C中违反严格别名,即使没有任何铸造?

*i和ui如何在这个代码中打印不同的数字,即使i被定义为int *i = &u.i; ? 我只能假设我在这里触发了UB,但我看不出如何。 (如果我select'C'作为语言, ideone demo会复制,但@ 2501指出,不是'C99 strict'是语言,但是我再次遇到gcc-5.3.0 -std=c99 ! ) // gcc -fstrict-aliasing -std=c99 -O2 union { int i; short s; } u; int * i = &u.i; short * s = &u.s; int main() { *i = 2; *s = 100; printf(" *i = %d\n", *i); // prints 2 printf("ui […]

一个接近于零的浮点值是否会导致零除错误?

大家都知道你不应该直接比较花车,而是使用宽容: float a,b; float epsilon = 1e-6f; bool equal = (fabs(ab) < epsilon); 我想知道是否同样适用于比较一个值为零,然后在分区中使用它。 float a, b; if (a != 0.0f) b = 1/a; // oops? 在这种情况下,我还需要与epsilon进行比较吗?

为什么WCF中不允许重载方法?

假设这是一个ServiceContract [ServiceContract] public interface MyService { [OperationContract] int Sum(int x, int y); [OperationContract] int Sum(double x, double y); } 在C#中允许方法重载,但是WCF不允许你重载operation contracts宿主程序在托pipe时会抛出InvalidOperationException