小编And*_*nov的帖子

C++ 11向后兼容性(将null整数常量转换为指针)

C++标准允许将零整数常量隐式转换为任何类型的指针.

以下代码无效,因为v此处的值不是常量:

float* foo()
{
    int v = 0;
    return v;    // Error
}
Run Code Online (Sandbox Code Playgroud)

但是以下代码是正确的:

float* foo()
{
    const int v = 0;
    return v;    // Ok in C++98 mode, error in C++11 mode
}
Run Code Online (Sandbox Code Playgroud)

问题是:为什么gccclang(试过不同的版本)在c ++ 98/03模式下正确编译代码但在c ++ 11/14模式下编译时返回警告/错误(-std=c++11)?我试图找到C++ 11工作草案PDF中的变化,但没有成功.

英特尔编译器16.0和VS2015编译器在两种情况下都没有显示错误和警告.

c++ g++ language-lawyer c++11

10
推荐指数
1
解决办法
354
查看次数

C#泛型性能与接口

考虑以下C#代码:

interface IFace
{
    void Do();
}

class Foo: IFace
{
    public void Do() { /* some action */ }
}

class Bar
{
    public void A(Foo foo) 
    {
        foo.Do();
    }

    public void B<T>(T foo)
        where T: IFace
    {
        foo.Do();
    }

    public void C(IFace foo)
    {
        foo.Do();
    }

    public void D<T>(T foo)
        where T: class, IFace
    {
        foo.Do();
    }
}
Run Code Online (Sandbox Code Playgroud)

具有以下用途:

Foo foo = new Foo();
Bar bar = new Bar();

MeasureExecutionTime(() => bar.A(foo), "A");
MeasureExecutionTime(() => bar.B(foo), "B");
MeasureExecutionTime(() …
Run Code Online (Sandbox Code Playgroud)

c# generics

2
推荐指数
1
解决办法
742
查看次数

标签 统计

c# ×1

c++ ×1

c++11 ×1

g++ ×1

generics ×1

language-lawyer ×1