我前段时间听说我不应该创建具有std::string类型字段的异常类.这就是Boost网站所说的.基本原理是,std::string如果内存分配失败,复制构造函数可以抛出异常,如果在捕获当前处理的异常之前抛出异常,程序将终止.
但是,它仍然存在于移动构造函数的世界中吗?抛出异常时,不会使用移动构造函数而不是复制构造函数吗?我是否理解正确使用C++ 11不会发生内存分配,不存在异常的可能性,std::string现在在异常类中绝对正常?
我有一个比较两个日期的存储过程.从我的应用程序的逻辑,我期望它们是平等的.但是,比较失败了.这样做的原因是,一个值被存储为一个事实DATETIME,不得不CONVERT-ed到DATETIME2正在相比其他前DATETIME2.显然,这改变了它的价值.我做了这个小测试:
DECLARE @DateTime DATETIME='2018-01-18 16:12:25.113'
DECLARE @DateTime2 DATETIME2='2018-01-18 16:12:25.1130000'
SELECT @DateTime, @DateTime2, DATEDIFF(NANOSECOND, @DateTime, @DateTime2)
Run Code Online (Sandbox Code Playgroud)
为什么这些值之间存在333333ns的差异?我认为a DATETIME2,作为一种更精确的类型,应该能够准确地表示可以存储在一个中的所有值DATETIME?DATETIME2的文档只说:
转换来自datetime时,将复制日期和时间.分数精度扩展到7位数.
没有关于转换在值中添加或减去333333ns的警告!那么为什么会这样呢?
我正在使用SQL Server 2016.
编辑:奇怪的是,在不同的服务器上,我得到零差异.两者都是SQL Server 2016,但我遇到问题的那个兼容级别设置为130,我没有将它设置为120.在它们之间切换会改变这种行为.
edit2: DavidG在评论中建议我使用的值可以表示为DATETIME2但不是a DATETIME.所以我修改了我的测试以确保我分配的值@DateTime2是一个有效值DATETIME:
DECLARE @DateTime DATETIME='2018-01-18 16:12:25.113'
DECLARE @DateTime2 DATETIME2=CONVERT(DATETIME2, @DateTime)
SELECT @DateTime, @DateTime2, DATEDIFF(NANOSECOND, @DateTime, @DateTime2)
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个代码,在给定TFS存储库中的项目路径和两个修订版本的情况下,将计算内容文件在这两个时刻之间的差异.现在代码可能如下所示:
using (var projectCollection = new TfsTeamProjectCollection(new Uri(repositoryUrl)))
{
projectCollection.EnsureAuthenticated();
var versionControlServer = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));
string path = "$/MyProject/path/to/file.xml"
var before = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(minRevision.ToString(), null));
var after = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(maxRevision.ToString(), null));
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
{
var options = new DiffOptions();
options.Flags = DiffOptionFlags.EnablePreambleHandling;
options.OutputType = DiffOutputType.Unified;
options.TargetEncoding = Encoding.UTF8;
options.SourceEncoding = Encoding.UTF8;
options.StreamWriter = writer;
Difference.DiffFiles(versionControlServer, before, after, options, path, true);
writer.Flush();
var reader = new StreamReader(stream);
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试打开一个TFS Build Process Template(DefaultTemplate.11.1.xaml)文件,其中包含来自Community TFS Build Extensions的活动.我正在关注这里的 instractions ,部分将自定义活动放入Visual Studio中.我在Visual Studio 2012的RC版本中没有遇到任何问题,但是现在,在升级到发行版之后,尝试打开文件最终会出错:
System.Xaml.XamlException:'属性'BuildSettings'的类型'InArgument(mtbwa:BuildSettings)'无法解析.
基于此模板运行构建时,TFS本身似乎没有任何问题.
我可以在没有技巧的情况下打开文件,但当然自定义活动没有正确显示.
这段代码:
@echo off
set /p a=Installing [<nul
set b=1
:loop
if %b% leq 2 set /p a=°<nul
if %b% gtr 4 if %b% leq 6 set /p a=±<nul
if %b% gtr 6 if %b% leq 8 set /p a=²<nul
if %b% gtr 8 if %b% leq 10 set /p a=±<nul
if %b% gtr 10 set /p a=°<nul
choice /t 1 /c y /d y>nul
set /a b=%b%+1
if %b%==13 (echo ]&goto :eof)
goto :loop
Run Code Online (Sandbox Code Playgroud)
...来自http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_1237-DOS-ECHO-text-to-previous-line-by-Paul-Tomasi.html#c18182并生成以下内容cmd窗口中的输出:
Installing [??????????]
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法通过谷歌找到解释这是如何工作的解释.将其他扩展的ascii字符替换为它们的位置似乎产生"命令的语法不正确",因此只能设法猜测这是一个黑客,通过无意的方式将这些字符交换到扩展的ascii集中的较低字符由设计师的技巧. …
我在Visual Studio 2013中遇到了一个奇怪的行为.我有一个C#程序写入标准输出,让我们说
using System;
using System.Threading;
namespace CsSandbox
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello world!");
Thread.Sleep(10000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在项目属性的Debug选项卡中,我已将输出重定向到文件,如下所示:

如果我在应用程序仍在运行时在这些10s内打开文件,则该文件确实包含"Hello world!".但是,一旦程序退出,文件就会被清除.从命令行运行程序时不会发生这种情况.
有没有理由为什么Visual Studio会这样做?有没有办法绕过这种行为?
在我的Angular 2应用程序中,我想要一个输入列表.在其中一个内部按Enter将添加一个新输入并立即关注它.这是一个已在本网站上提出过的问题,Eric Martinez提供了一个简洁的答案,通过自定义指令实现了这一点.
他的解决方案基于一个整数的虚拟列表.我在努力使其适应更现实的情况时遇到了困难.我已经分叉了Eric的插件,所以你可以在这里运行代码,但最重要的文件就是这个:
//our root app component
import {Component, Directive, Renderer, ElementRef} from 'angular2/core'
class Person { name: string }
@Directive({
selector : 'input'
})
class MyInput {
constructor(public renderer: Renderer, public elementRef: ElementRef) {}
// It won't work at construction time
ngOnInit() {
this.renderer.invokeElementMethod(
this.elementRef.nativeElement, 'focus', []);
}
}
@Component({
selector: 'my-app',
providers: [],
template: `
<div *ngFor="#input of inputs">
<input
(keydown.enter)="add()"
[(ngModel)]="input.name"
type="text"/>
</div>
`,
directives: [MyInput]
})
export class App {
inputs: …Run Code Online (Sandbox Code Playgroud) 的文档SET XACT_ABORT仅说明了启用此选项的效果。
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚。
我不相信这就是全部真相。读完本文后,我担心如果在外部进程创建的事务中执行启用此选项的存储过程,则最终可能会回滚外部事务。幸运的是,我的担心被证明是没有根据的。然而,这意味着我现在并不真正理解如何XACT_ABORT运作。SQL Server 检查事务是否应该回滚的条件是什么?
我进行了以下实验:(此代码的摘要如下,因为代码块之前有一个编号列表会破坏 StackOverflow 的格式,呃)
CREATE TABLE Dummy
(
ID INT NOT NULL IDENTITY CONSTRAINT PK_Dummy PRIMARY KEY,
Text NVARCHAR(128) NOT NULL
)
CREATE UNIQUE NONCLUSTERED INDEX IX_Dummy_Text ON dbo.Dummy(Text)
GO
CREATE OR ALTER PROCEDURE InsertDummy
@Text NVARCHAR(128)
AS
BEGIN
SET NOCOUNT OFF
SET XACT_ABORT ON
INSERT dbo.Dummy (Text) VALUES (@Text)
END
GO
SET XACT_ABORT ON
BEGIN TRANSACTION
BEGIN TRY
EXEC dbo.InsertDummy …Run Code Online (Sandbox Code Playgroud) 我在使用Ajax.BeginForm()简单的ASP.NET MVC应用程序时遇到问题.我搜索过SO以寻求解决方案,但我发现的任何内容似乎都没有帮助.
我使用默认的Visual Studio 2015模板创建了一个新项目.我已将Index.cshtml文件更改为:
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
<h1>ASP.NET</h1>
<p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
<p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>
<div class="row">
<div id="ajax-test"></div>
@using (Ajax.BeginForm("Test", new AjaxOptions()
{
UpdateTargetId = "ajax-test",
InsertionMode = InsertionMode.Replace
}))
{
<input type="submit" />
}
</div>
Run Code Online (Sandbox Code Playgroud)
我添加了一个新动作HomeController:
public ActionResult Test()
{
return PartialView("Test");
}
Run Code Online (Sandbox Code Playgroud)
一个新观点Home\Test.cshtml …
我刚开始关注Angular2教程.现在我回到它并进入路由章节,似乎教程已经稍微更新,我不得不返回并更新package.json到当前版本或app.routes.ts文件无法编译.现在它编译得很好但是当我运行应用程序时,脚本在运行时崩溃,显然在Zone.js包内:
我已经检查过,platform-browser-dynamic.umd.js文件确实不存在于磁盘上.
这是新package.json文件:
{
"name": "angular2-quickstart",
"version": "1.0.0",
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0-rc.4",
"@angular/compiler": "2.0.0-rc.4",
"@angular/core": "2.0.0-rc.4",
"@angular/forms": "0.2.0",
"@angular/http": "2.0.0-rc.4",
"@angular/platform-browser": "2.0.0-rc.4",
"@angular/platform-browser-dynamic": "2.0.0-rc.4",
"@angular/router": "3.0.0-beta.1",
"@angular/router-deprecated": "2.0.0-rc.2",
"@angular/upgrade": "2.0.0-rc.4",
"systemjs": "0.19.27",
"core-js": "^2.4.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"zone.js": "^0.6.12", …Run Code Online (Sandbox Code Playgroud) 在我工作的项目中,我遇到了一个<ul>嵌套在<a>标签内的标签(点击事件由JavaScript处理).我尝试<a>在无编号列表中添加另一个标记,发生了一些非常奇怪的事情.
请考虑以下HTML代码:
<a test="foo">
<ul>
<li>
Before link
<a>Link</a>
After link
</li>
</ul>
</a>
Run Code Online (Sandbox Code Playgroud)
当您检查浏览器工具时,您会看到这实际上是由浏览器呈现的,如下所示:

<ul>实际上并没有被包裹<a>.<a test="foo">标签有三个副本,一个是空的<ul>,前一个是空的<ul>,另一个是包装<li>元素的内容,直到预期<a>Link</a>.
我在Chrome和Firefox中对此进行了测试,两种浏览器都发生了同样的情况.
这里发生了什么?