静态类型化和动态类型化在堆栈溢出(例如 )上被反复询问。
协商一致意见似乎是(引用上述链接的最高答复):
如果在编译时知道变量的类型,则会静态地输入语言。
一种动态的语言:
如果类型与运行时值相关联,而不是命名变量/字段/等,则该语言是动态键入的。
Perl似乎是静态类型的(或其他静态/动态类型的常见定义)。它有3种类型:标量、数组、散列(为了简单起见忽略引用之类的东西)。类型与变量一起声明:
my $x = 10; # declares a scalar variable named x
my @y = (1, 2, 3);
在我开始使用C#之前,我主要是有C/C++背景的。我在C#中的第一个项目中做的一件事就是创建一个这样的类
class Element{
public uint Size;
public ulong BigThing;
}
然后,我感到羞愧的是,这需要转换:
int x=MyElement.Size;
就像这样
int x=5;
uint total=MyElement.Size+x;
为什么语言设计者决定使有符号和无符号整数类型不能隐式强制转换?为什么在整个.Net库中没有更多地使用无符号类型呢?例如,String.Length永远不能为负,但它是一个带符号的整数。
我有一些遗留的Fortran代码,我被要求分析并翻译成一种现代语言。我不知道过去用哪个编译器来编译代码,所以现在我尝试用gfortran编译它。代码包含这样一条语句,这是gfortran抱怨的原因:
program test
implicit none
integer*4 :: var
var=.true.
if(var) then
write(*,*) "Hi"
endif
end program test
用gfortran编译它会产生以下错误:
test.f:6:9:
if(var) then
对于转换构造器和转换操作符的优先级,在简单语言中,标准有什么规定?
另外,我可以看到,当我有两个类myClass和otherClass,并且我想将otherClass转换成如下所示的myClass时,那么转换操作符就会被调用为类otherClass
myClass mc = otherclass();//creates temp for otherClass
这种行为在gcc和MSVC中都是一样的。
但在上面的编译器中,当我执行以下操作时,这种行为就不一样了-
otherClass oC;
myClass mc = oC;//for gcc (C++11): Ambiguous, for MS
当我们看一下一些基本的数据类型,比如char和int,我们知道char只是一个无符号字节(取决于语言),int只是一个有符号的dword,bool只是一个只能是1或0的char,等等。我的问题是,为什么我们在编译语言中使用这些类型,而不是仅仅声明一个byte、dword等类型的变量,因为一旦你区分了有符号数据和无符号数据以及浮点数据,上面提到的类型的操作几乎是一样的?
为了扩展问题的上下文,在C语言中,if和while语句可以接受布尔值作为输入,该布尔值通常存储为char,这排除了显式布尔类型的需要。
在实践中,这两段代码在二进制级别上应该是等价的:
int main()
{
int
我不太确定为什么我会得到这个错误,尽管我稍微研究了一下。我正在尝试编写一个程序来查看图像并找出哪种颜色的颜色更多。代码如下:
import javax.swing.JOptionPane;
import java.io.*;
String fileName = JOptionPane.showInputDialog("Please enter the file name:");
int red = 0;
int orange = 0;
int yellow = 0;
int green = 0;
int blue = 0;
int violet = 0;
我得到了以下错误:
Generic parameter 'T' could not be inferred
在线:let data = try encoder.encode(obj)
这是代码
import Foundation
struct User: Codable {
var firstName: String
var lastName: String
}
let u1 = User(firstName: "Ann", lastName: "A")
let u2 = User(firstName: "Ben
由于某种原因,我记得在过去,我不能做这样的事情:
int arraySize;
cin >> arraySize;
int array[arraySize];
但最近,我又试了一次,没有引起任何问题。我可以在此之前发誓,这是在我的编译器中抛出了一个错误(macOS塞拉利昂,Xcode 8.1)。语言中有什么更新了吗?-我可能完全记错了,这以前也不是问题,但我不确定。我认为数组大小必须在编译期间定义,而用户无法选择(这是实现动态数组的地方)。
这个问题更多的是出于好奇心,而不是项目需求或问题。
我有一种语言的不符合CLS的代码(比如C#),我只需要在我当前的语言中这样使用它(跨项目,所以不能选择内部),同时希望允许其他语言(比如VB)能够调用冲突的实现,而不会产生编译时错误。
例如,
//C#
public class SecurityService
{
....
public void Print()
{
Console.WriteLine("print"); //This method prints Service Name in lower case
}
pub
我希望根据表元素的条目索引提供实际页面。我用PageRequest.of(int page, int size)。
我有一个传递给函数的index和一个不变的PAGESIZE_SEARCH,它是50。
我想按照以下索引传递当前页面:
PageRequest.of((int) index/PAGESIZE_SEARCH, PAGESIZE_SEARCH)
我的想法(IntelliJ终极2020.1.1)使我的想法黯然失色,暗示着Casting 'index' to 'int' is redundant。如果我删除强制转换,即使编译器也接受它,我也不会得到运行时异常