在VS2017 RC中,当您尝试使用新的元组语法时,您收到以下错误:
CS8179未定义或导入预定义类型'System.ValueTuple`X'
为了使用元组语法,您必须手动将ValueTuple nuget包导入到项目中.没什么大不了的,因为它是预发布版本,我认为它将在RTM中更改,因此它将默认启用.不幸的是,在最终版本中仍然如此,您必须为每个项目下载nuget包以使用元组语法.
有没有办法默认为每个项目启用元组语法?
这两种语法有什么区别吗?
void fun( void (*funptr)() )
{
funptr(); // calls the function
}
void fun( void funptr() )
{
funptr(); // calls the function
}
Run Code Online (Sandbox Code Playgroud)
我一直在使用第一种形式,但我刚看到第二种形式,它似乎表现完全相同,而语法更清晰.
你能解释一下STL容器如何使用空的初始化列表处理赋值运算符?
当我做这样的事情:
vector<int> v;
v = { };
Run Code Online (Sandbox Code Playgroud)
被调用的函数不是:
vector& operator= (initializer_list<value_type> il);
Run Code Online (Sandbox Code Playgroud)
但:
vector& operator= (vector&& x);
Run Code Online (Sandbox Code Playgroud)
另一方面,当我和我自己的班级做类似的事情时:
struct A {
A& operator= (const A&) { return *this; }
A& operator= (A&&) { return *this; }
A& operator= (initializer_list<int>) { return *this; }
};
/* ... */
A a;
a = { };
Run Code Online (Sandbox Code Playgroud)
代码不能在VS2013上编译,并说:
error C2593: 'operator =' is ambiguous
Run Code Online (Sandbox Code Playgroud)
如果列表不为空,它工作正常,它只是用初始化列表调用函数.只有当列表为空时才会出现问题,在向量上调用rvalue赋值运算符,在我的类上它会给出错误.
如何在向量和其他容器中处理这种情况?
c++ initializer-list overload-resolution compiler-bug visual-studio-2013
我有以下用于 Azure AD 身份验证的代码:
services
.AddAuthorization(options =>
{
options.AddPolicy(name, builder =>
{
builder
.AddAuthenticationSchemes(AzureADDefaults.AuthenticationScheme)
.RequireAuthenticatedUser();
});
})
.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options =>
{
configuration.Bind("AzureAd", options);
});
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
...
}
Run Code Online (Sandbox Code Playgroud)
AzureADDefaults.AuthenticationScheme 和 AzureADDefaults.OpenIdScheme 现已过时,并显示消息“请改用 Microsoft.Identity.Web。请参阅https://aka.ms/ms-identity-web”。。但是我找不到任何明确的文档如何升级以下代码以使用 Identity.Web 而不是那些过时的常量。
有人知道如何删除这个过时的代码吗?