我编写了一个涉及使用switch语句的程序......但是在编译时它显示:
错误:跳转到案例标签.
为什么这样做?
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class contact
{
public:
string name;
int phonenumber;
string address;
contact() {
name= "Noname";
phonenumber= 0;
address= "Noaddress";
}
};
int main() {
contact *d;
d = new contact[200];
string name,add;
int choice,modchoice,t;//Variable for switch statement
int phno,phno1;
int i=0;
int initsize=0, i1=0;//i is declared as a static int variable
bool flag=false,flag_no_blank=false;
//TAKE DATA FROM FILES.....
//We create 3 files names, phone numbers, Address and then …
Run Code Online (Sandbox Code Playgroud) 我在这里看到一些关于静态与动态类型的有趣讨论.我通常更喜欢静态类型,因为编译类型检查,更好的文档代码等.但是,我确实同意,如果像Java那样完成代码,它们会使代码混乱.
所以我即将开始构建自己的功能样式语言,类型推断是我想要实现的事情之一.我确实理解这是一个很大的主题,我并不是想创造一些以前没有做过的东西,只是基本的推理......
什么阅读的任何指针将帮助我这个?优选更实用/实用的东西,而不是更理论的范畴理论/类型理论文本.如果有一个实现讨论文本,使用数据结构/算法,那将是可爱的.
compiler-construction functional-programming type-inference language-design
我正在刷新LINQ,并试图理解let
和使用into
关键字之间的区别.到目前为止,就我的理解而言,let
关键字似乎比关键字更好into
.
该into
关键字实质上允许在投影后继续查询.(只是想明确说明我不是指组连接的那个.)
给定一系列名称,它允许人们执行以下操作:
var intoQuery =
from n in names
select Regex.Replace(n, "[aeiou]", "")
into noVowel
where noVowel.Length > 2
select noVowel;
Run Code Online (Sandbox Code Playgroud)
它需要选择的结果,并将其放置到noVowel
变量,然后允许一个引入额外的where
,orderby
和select
条款.一旦noVowel
变量被创建,该n
变量不再可用.
该let
关键字,而另一方面,使用温度匿名类型,让你在同一时间重复使用一个以上的变量.
您可以执行以下操作:
var letQuery =
from n in names
let noVowel = Regex.Replace(n, "[aeiou]", "")
where noVowel.Length > 2
select noVowel;
Run Code Online (Sandbox Code Playgroud)
这两个noVowel
和n
变量都可以使用(即使我在这种情况下没有使用它).
虽然我可以看到差异,但我不太明白为什么人们会想要在into
关键字上使用let
关键字,除非明确要确保以前的变量不能在查询的后半部分使用.
那么,两个关键词存在的原因是否存在?
我的问题不是浮动精度.这是为什么Equals()
不同于==
.
我明白为什么.1f + .2f == .3f
是false
(同时.1m + .2m == .3m
是true
).
我得到的==
是参考,.Equals()
是价值比较.(编辑:我知道还有更多.)
但是,为什么(.1f + .2f).Equals(.3f)
true
,而(.1d+.2d).Equals(.3d)
仍然是false
?
.1f + .2f == .3f; // false
(.1f + .2f).Equals(.3f); // true
(.1d + .2d).Equals(.3d); // false
Run Code Online (Sandbox Code Playgroud) 显然,您可以this
从结构中的任何位置更改值(但不能在类中):
struct Point
{
public Point(int x, int y)
{
this = new Point();
X = x; Y = y;
}
int X; int Y;
}
Run Code Online (Sandbox Code Playgroud)
我以前也没见过这种情况,也从未见过它.为什么一个人想要这样做?Eric Lippert提醒我们,必须证明某个功能是合理的.有什么好的用例可以证明这一点?有什么场景这是非常宝贵的吗?我找不到任何文件1.
此外,对于调用构造函数,已经有一个更好的已知替代语法,因此此功能有时是多余的:
public Point(int x, int y)
: this()
{
X = x; Y = y;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我向大家道歉.我实际上想要说"多维数组"时使用了"锯齿状数组"一词(如下面的例子所示).我为使用错误的名字道歉.我实际上发现锯齿状阵列比多维阵列更快!我已经为锯齿状阵列添加了测量值.
我试图用一个 盘陀今天的多维数组,当我注意到它的性能并不像我预期的那样.使用单维数组和手动计算索引要比使用2D数组快得多(几乎两倍).我使用1024*1024
数组(初始化为随机值)编写了一个测试 ,进行了1000次迭代,我在我的机器上得到了以下结果:
sum(double[], int): 2738 ms (100%)
sum(double[,]): 5019 ms (183%)
sum(double[][]): 2540 ms ( 93%)
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码:
public static double sum(double[] d, int l1) {
// assuming the array is rectangular
double sum = 0;
int l2 = d.Length / l1;
for (int i = 0; i < l1; ++i)
for (int j = 0; j < l2; ++j)
sum += d[i * l2 + j];
return sum;
}
public static double sum(double[,] d) …
Run Code Online (Sandbox Code Playgroud) 我在设置Laravel 4时遇到问题.打开索引页面时出现此错误:
file_put_contents(/Users/laravel/app/storage/meta/services.json)[function.file-put-contents]:
无法打开流:权限被拒绝.
我在这里错过了什么?
如何从以下字符串中删除HTML标记?
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="LINE-HEIGHT: 115%;
FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #333333; FONT-SIZE: 9pt">In an
email sent just three days before the Deepwater Horizon exploded, the onshore
<SPAN style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> manager in charge of
the drilling rig warned his supervisor that last-minute procedural changes were
creating "chaos". April emails were given to government investigators by <SPAN
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> and reviewed by The Wall
Street Journal and are the most direct evidence yet that workers on the rig
were unhappy …
Run Code Online (Sandbox Code Playgroud) 出于好奇:CLR如何调度虚拟方法调用接口成员到正确的实现?
我知道CLR为每种类型维护的VTable,每个方法都有方法槽,并且每个接口都有一个额外的方法槽列表,指向相关的接口方法实现.但我不明白以下内容:CLR如何有效地确定从类型的VTable中选择哪个接口方法槽列表?
从2005年5月刊的MSDN杂志中了解CLR如何创建运行时对象的文章Dril Into .NET Framework Internals讨论了由接口ID索引的进程级映射表IVMap.这是否意味着同一进程中的所有类型都具有指向同一IVMap的相同指针?
它还指出:
如果
MyInterface1
由两个类实现,则IVMap表中将有两个条目.该条目将指回嵌入在MyClass
方法表中的子表的开头.
CLR如何知道要选择哪个条目?它是否进行线性搜索以查找与当前类型匹配的条目?还是二元搜索?或者某种直接索引并且有一个可能有很多空条目的地图?
我还通过C#第3版阅读了CLR中的接口章节,但它没有谈到这一点.因此,这个问题的答案没有回答我的问题.
我们有一个需要确定性的游戏,因为它是多人游戏模型的一部分.我们还使用Lua,它在sprintf
内部使用(格式为%.14g
).
打印数字如0.00001时会出现问题.在某些情况下,它会打印1e-05
,在某些情况下,它会打印1e-005
(额外为零).
例如,当使用Visual Studio 2015进行编译时,它会进行打印1e-005
,并使用Visual Studio 2013进行打印1e-05
.我尝试了不同的区域设置,但似乎没有任何效果.
问题是:实现确定性结果的最佳解决方案是什么? 我不关心科学记谱法是否标准化或消除.
我想到的解决方案:
%f
符号时,它不会忽略无关紧要的零,因此%.14f
会导致不切实际的长数.sprintf
方法(从某些标准库粘贴的副本)