相关疑难解决方法(0)

为什么我不能在.NET中为结构定义默认构造函数?

在.NET中,值类型(C#struct)不能包含没有参数的构造函数.根据这篇文章,这是CLI规范要求的.会发生什么,对于每个值类型,都会创建一个默认构造函数(由编译器?),它将所有成员初始化为零(或null).

为什么不允许定义这样的默认构造函数?

一个微不足道的用途是有理数:

public struct Rational {
    private long numerator;
    private long denominator;

    public Rational(long num, long denom)
    { /* Todo: Find GCD etc. */ }

    public Rational(long num)
    {
        numerator = num;
        denominator = 1;
    }

    public Rational() // This is not allowed
    {
        numerator = 0;
        denominator = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用当前版本的C#,默认的Rational 0/0并不是那么酷.

PS:默认参数是否有助于解决C#4.0或者是否会调用CLR定义的默认构造函数?


Jon Skeet回答道:

要使用您的示例,当有人执行时您希望发生什么:

 Rational[] fractions = new Rational[1000];
Run Code Online (Sandbox Code Playgroud)

它应该通过你的构造函数1000次?

当然应该,这就是我首先编写默认构造函数的原因.当没有定义显式默认构造函数时,CLR应该使用默认的归零构造函数; 这样你只需支付你使用的费用.然后,如果我想要一个1000个非默认Rational的容器(并希望优化1000个结构),我将使用一个 …

.net c# struct

242
推荐指数
6
解决办法
10万
查看次数

模板<unsigned int N>是什么意思?

在声明模板时,我习惯使用这种代码:

template <class T>
Run Code Online (Sandbox Code Playgroud)

在这个问题中,他们使用了:

template <unsigned int N>
Run Code Online (Sandbox Code Playgroud)

我查看它编译.但是这是什么意思?它是非类型参数吗?如果是这样,我们怎么能有一个没有任何类型参数的模板?

c++ templates

110
推荐指数
4
解决办法
9万
查看次数

在C和C++中返回void类型

这编译没有任何警告.

这在C和C++中是合法的还是只在gcc和clang中工作?

如果它是合法的,那么在C99之后它是新东西吗?

void f(){

}

void f2(){
    return f();
}
Run Code Online (Sandbox Code Playgroud)

更新

正如"Rad Lexus"建议我试过这个:

$ gcc -Wall -Wpedantic -c x.c 
x.c: In function ‘f2’:
x.c:7:9: warning: ISO C forbids ‘return’ with expression, in function returning void [-Wpedantic]
  return f();
Run Code Online (Sandbox Code Playgroud)
$ clang -Wall -Wpedantic -c x.c 
x.c:7:2: warning: void function 'f2' should not return void expression [-Wpedantic]
        return f();
        ^      ~~~~~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
$ gcc -Wall -Wpedantic -c x.cc
(no errors)
Run Code Online (Sandbox Code Playgroud)
$ clang -Wall -Wpedantic -c x.cc
(no errors)
Run Code Online (Sandbox Code Playgroud)

更新 …

c c++ gcc clang language-lawyer

65
推荐指数
3
解决办法
9538
查看次数

标签 统计

c++ ×2

.net ×1

c ×1

c# ×1

clang ×1

gcc ×1

language-lawyer ×1

struct ×1

templates ×1