这里发生了什么?
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
Run Code Online (Sandbox Code Playgroud)
2003标准中的6.4.3节阐述了在选择语句条件中声明的变量如何具有延伸到由条件控制的子语句末尾的范围.但是我没有看到它在什么地方说不能在括号内加上括号,也没有说明每种条件只有一个声明.
即使在需要条件中只有一个声明的情况下,这种限制也很烦人.考虑一下.
bool a = false, b = true;
if(bool x = a || b)
{
}
Run Code Online (Sandbox Code Playgroud)
如果我想在x设置为false的情况下输入'if"-body范围,则声明需要括号(因为赋值运算符的优先级低于逻辑OR),但由于括号不能使用,因此需要声明外部x身体,将声明泄露到比预期更大的范围.显然这个例子是微不足道的,但更现实的情况是a和b是函数返回需要测试的值
那么我想要做的是不符合标准,还是我的编译器只是破坏了我的球(VS2008)?
使用ng add @angular/material
为 Angular 项目添加 Material 支持时有提示Set up global Angular Material typography styles?
这究竟意味着什么?文档说明出现了提示,但没有描述其实际含义。
从SVN手册引用:
在Subversion 1.6中,引入了新的插入符号(^)表示法作为"存储库根目录的URL"的简写.例如,您可以使用^/tags/bigsandwich /来引用存储库根目录中/ tags/bigsandwich目录的URL.请注意,此URL语法仅在您当前工作目录是工作副本时才有效 - 命令行客户端通过查看工作副本的元数据来了解存储库的根URL.另请注意,当您希望精确引用存储库的根目录时,必须使用^ /(带有斜杠字符),而不仅仅是^.
但是当我跑步时:
C:\Svn_Working_Copies\Test1\branches\ver_1_0\Project1>svn log ^/
Run Code Online (Sandbox Code Playgroud)
在我的WinXP工作站上,使用svn 1.7版,其中Test1是svn存储库的工作副本,我收到以下错误:
svn: E155007: 'C:\' is not a working copy
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
在Visual Studio中在Windows上开发C++项目的过去,您的Visual Studio版本将拥有自己的C和C++库版本,您的项目将引用特定版本的Windows SDK以访问标头以进行访问到Win32平台.如果安装了多个版本的Windows SDK,则会出现一个涉及环境变量的复杂系统,使您可以选择默认情况下Windows SDK Visual Studio将使用的版本.
这不是很好,让它正常工作需要一些挖掘,但它只是工作.
刚刚从VS2012升级到VS2015,在我看来,无论这个系统被替换了什么都是彻头彻尾的破坏,或者我只是不理解它.
将包含conio.h的简单VS2012 C++控制台应用程序升级到VS2015,并且没有报告错误.为什么?conio.h不再位于Visual Studio C/C++库中,而是现在位于Windows Kit 10中,升级项目不会重置所使用的SDK(如您所料).
在VS2015中创建一个全新的Hello World C++应用程序C++项目包括目录继承$(VC_IncludePath)和$(WindowsSDK_IncludePath).$(WindowsSDK_IncludePath)从C:\ Program Files(x86)\ Windows Kits\8.1中提取标题,而$(VC_IncludePath)从C:\ Program Files(x86)\ Windows Kits\10中提取标题.
如此简单的项目升级失败,升级时未报告错误.清理新的控制台项目同时从2个不同的Windows Kit安装中提取标题,现在我在C:\ Program Files(x86)\ Microsoft SDKs和C:\ Program Files(x86)\ Windows Kits下有8.1和10的条目.Windows Kit 8.1包含Win32和WinRt标头,而Windows Kit 10包含C/C++标头.
我是否有错误配置和损坏的安装或者它应该如何混乱?
如果这个混乱是应该如何,这是如何工作的?我已经尝试在MSDN上搜索有关Windows套件的信息,但除了关于Windows驱动程序工具包的东西之外什么都没有,这曾经是完全不同的东西,但我不知道它是否仍然存在.
是否有任何我遗漏的文档解释了这个库配置背后的基本原理以及它是如何使用的?
我正在尝试将有用的版本号注入到我正在使用 Azure DevOps 管道构建和部署的 ASP Core 应用程序中。
- script: dotnet publish -c $(buildConfiguration) -p:Version=2022.06.21 -p:SourceRevisionId=$(Build.SourceVersion)
Run Code Online (Sandbox Code Playgroud)
但我一生都无法弄清楚如何将日期放入我可以实际使用的变量中。这确实非常值得注意,因为当前日期(附加了一些其他内容)是 DevOps 本身使用的默认内部版本号。
文档太可怕了。我该怎么做呢?
是否可以使用注册免费COM与Dotnet互操作和C#?如果是这样,如何在C#项目中添加对COM对象的引用?
我有一个免费的ATL COM服务器DLL,带有嵌入式清单和两个测试客户端,一个cpp,另一个c#.cpp客户端使用import语句正确引用COM对象
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
Run Code Online (Sandbox Code Playgroud)
或者在Linker-> Manifest File选项下将'Additional Manifest Dependencies'设置为"type ='win32'name ='TestComSvr1'version ='1.0.0.0'",之后cpp客户端只要COM组件正确运行在同一目录中.
c#客户端虽然拒绝播放.
尝试将文件引用添加到未注册的COM组件dll或未注册的tlb会导致错误:
"无法添加对'blah blah'的引用.请确保该文件是可访问的,并且它是一个有效的程序集或COM组件".
仅使用'regtlib TestComSvr'注册类型库,然后创建文件或COM引用,导致c#项目无法构建:
"加载类型库/ DLL时出错.(HRESULT异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))".
通常在c#项目中注册COM组件并创建引用,将引用设置为Isolated,构建c#项目然后取消注册组件并运行c#项目会导致此异常:
由于以下错误,检索具有CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG)).
注意:即使这有效,但无论如何它都不是一个有用的案例,因为最终它仍然需要注册组件,我只是测试它的彻底性.
到目前为止,我能够从C#引用COM对象的唯一方法是通过注册COM对象本身,这当然完全违背了这一点,从那以后它根本就没有注册.
有人有任何想法吗?
(这是在带有VS2010 sp1的WinXP上).
在VS2010中,使用默认项目配置的单行hello world C++控制台程序将30多个中间构建文件文件输出到其输出目录.OBJ文件,PCH文件,之流,登录,buildstate,美洲开发银行,嵌入式清单和rc文件和不低于18个TLOG文件.
这些都不是实际输出,对于exe控制台应用程序,唯一正确输出的文件是exe本身和pdb文件.
所以我的问题是:有没有什么办法来配置VS2010打造这一切的垃圾成中间目录和输出只是有用的东西到输出目录?
我正在Win7上开发一个需要执行映射的Dotnet 4.0应用程序.作为地图绘制应用程序,它输出高分辨率抗锯齿多边形的垃圾负载.它目前支持两种类型的渲染输出,GDI +和Direct2D.
我担心因为GDI +输出比Direct2D快3倍左右.
两个渲染器都使用AA.我知道我可以在Direct2D中关闭它,这有点提高了吞吐量(比GDI +差了大约2倍).但这不是一个解决方案,因为我可以在GDI +中关闭AA并在那里获得更好的性能.出于此基准测试的目的,我的渲染代码是微不足道的.我希望我犯了一些可怕的错误,有人可以指出我会纠正这种情况.
_renderTarget.BeginDraw();
// Paint background.
RectF rf = new RectF(0.0f, 0.0f, renderTargetSize.Width, renderTargetSize.Height);
_renderTarget.FillRectangle(rf, _backgroundBrush);
// Draw polygons
foreach (GisTypes.Polygon polygon in _polygons)
{
using (PathGeometry path = _factory.CreatePathGeometry())
{
using (GeometrySink sink = path.Open())
{
sink.SetFillMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1
.FillMode.Alternate);
Point2F[] points = Array.ConvertAll(polygon.Points,
x => new Point2F((float)x.X, (float)x.Y));
sink.BeginFigure(points[0], FigureBegin.Filled);
for (int i = 1; i < points.Length; ++i)
{
sink.AddLine(points[i]);
}
sink.EndFigure(FigureEnd.Closed);
sink.Close();
}
using (TransformedGeometry transformedPath = _factory.CreateTransformedGeometry(
path, WorldToPage))
{
_renderTarget.FillGeometry(transformedPath, …
Run Code Online (Sandbox Code Playgroud) 我打开 Visual Studio 2022 并创建一个新的空解决方案。
我添加一个.editorconfig
包含以下内容的文件:
root = true
[*]
end_of_line = lf
indent_style = space
indent_size = 3
tab_width = 3
Run Code Online (Sandbox Code Playgroud)
我向解决方案添加了一个新的 C# Web 应用程序项目。
没有一个文件的格式正确。全部缩进四个空格并crlf
换行。
editorconfig扩展似乎尚未升级以支持 Visual Studio 2022 。有没有办法在 Visual Studio 2022 中获得 editorconfig 支持?
在C++中输出浮点数的最优雅方法是什么,没有科学记数法或尾随零?
float a = 0.000001f;
float b = 0.1f;
cout << "a: " << a << endl; // 1e-006 terrible, don't want sci notation.
cout << "b: " << b << endl; // 0.1 ok.
cout << fixed << setprecision(6);
cout << "a: " << a << endl; // 0.000001 ok.
cout << "b: " << b << endl; // 0.100000 terrible, don't want trailing zeros.
Run Code Online (Sandbox Code Playgroud) c++ ×4
.net ×1
azure-devops ×1
c# ×1
com ×1
compilation ×1
direct2d ×1
editorconfig ×1
if-statement ×1
svn ×1
visual-c++ ×1
winapi ×1
windows ×1