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)
问题是:为什么gcc和clang(试过不同的版本)在c ++ 98/03模式下正确编译代码但在c ++ 11/14模式下编译时返回警告/错误(-std=c++11)?我试图找到C++ 11工作草案PDF中的变化,但没有成功.
英特尔编译器16.0和VS2015编译器在两种情况下都没有显示错误和警告.
考虑以下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)