C++为已检查的异常提供了语法,例如:
void G() throw(Exception);
void f() throw();
Run Code Online (Sandbox Code Playgroud)
但是,Visual C++编译器不检查它们; throw标志被忽略了.在我看来,这使得异常功能无法使用.所以我的问题是:有没有办法让编译器检查异常是否被正确捕获/重新抛出?例如,Visual C++插件或不同的C++编译器.
PS.我希望编译器检查异常是否被正确捕获,否则你最终会遇到必须对每个函数调用进行捕获的情况,即使它们明确声明它们不会抛出任何东西.
更新:当抛出标有throw()的函数时,Visual C++编译器确实显示警告.这很好,但令人遗憾的是,当你调用可能抛出的子程序时,警告不会出现.例如:
void f() throw(int) { throw int(13); }
void h() throw() { g(); } //no warning here!
Run Code Online (Sandbox Code Playgroud) 在PowerShell脚本中,如何获取名称中包含括号的环境变量的值?
更复杂的是,一些变量的名称包含括号,而其他变量的名称没有括号.例如(使用cmd.exe):
C:\>set | find "ProgramFiles"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
Run Code Online (Sandbox Code Playgroud)
我们看到%ProgramFiles%的不一样了%ProgramFiles(x86)%.
我的PowerShell代码以一种奇怪的方式失败,因为它在括号后忽略了环境变量名称的一部分.由于这恰好匹配了一个不同但现有的环境变量的名称,我不会失败,我只是得到了错误变量的正确值.
这是PowerShell脚本语言中的一个测试函数,用于说明我的问题:
function Do-Test
{
$ok = "C:\Program Files (x86)" # note space between 's' and '('
$bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles%
$d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6
# $d = "$Env:ProgramFiles(x86)" # fail (1)
if ( $d -eq $ok ) {
Write-Output "Pass"
} elseif …Run Code Online (Sandbox Code Playgroud) 我知道我们可以使用control-C退出IEX控制台.我很好奇是否有一个命令输入控制台也会做同样的事情.
Ruby有没有任何内置的转义和转义字符串的方法?在过去,我使用正则表达式; 但是,我发现Ruby可能一直在内部进行这样的转换.也许这个功能在某处暴露.
到目前为止,我已经提出了这些功能.他们工作,但他们似乎有点hacky:
def escape(s)
s.inspect[1..-2]
end
def unescape(s)
eval %Q{"#{s}"}
end
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
Chocolatey的软件包存储库显示了两个用于安装Git的流行软件包:
这两个包之间有什么区别?如何决定是否使用:
choco install git
Run Code Online (Sandbox Code Playgroud)
要么:
choco install git.install
Run Code Online (Sandbox Code Playgroud)
是另一个的超集吗?
我可以使用萨斯使用编译多个.SCSS或.SASS输入文件到一个单一的.CSS输出文件@import所描述这里.
如果我@import用来包含普通的.CSS文件,它们就不会被合并.输出.CSS文件仍包含@import指令.那讲得通.
但有没有办法可以覆盖这种行为,也许是命令行切换到Sass编译器?换句话说,我可以告诉Sass尝试强制合并,@import "foo.css";就好像它是.SCSS文件一样吗?
我正在使用带有许多.CSS文件的第三方库(Google Closure Library).我在我的项目中只使用了其中一些.我宁愿避免使用手动解决方案,例如将所有这些文件重命名为.SCSS(虽然这似乎有效)或将其内容复制并粘贴到我的.SCSS文件中(也可以).而且我不想将它们全部提供给客户端进口.我真的很喜欢Sass包含我使用'原样'的几个.CSS文件并生成单个输出样式表.可能?我还应该看看其他工具吗?
这是另一个VC9与GCC 4.2编译错误问题.以下代码使用VC9(Microsoft Visual C++ 2008 SP1)编译,但不适用于Mac上的GCC 4.2:
struct C
{
template< typename T >
static bool big() { return sizeof( T ) > 8; }
};
template< typename X >
struct UseBig
{
static bool test()
{
return X::big< char >(); // ERROR: expected primary-expression
} // before 'char'
};
int main()
{
C::big< char >();
UseBig< C >::test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有什么想法可以解决这个问题?
我正在尝试编写一些PowerShell函数来执行某些操作,然后透明地调用现有的内置函数.我想传递所有未触及的论点.我不想知道论点的任何细节.
我厌倦了使用'splat'来做这件事@args但是没有按照我的预期工作.
在下面的例子中,我写了一个叫做myls打印你好的玩具函数!然后调用相同的内置函数,Get-ChildItem内置别名ls调用其余参数行完整.到目前为止我的工作得很好:
function myls
{
Write-Output "hello!"
# $MyInvocation | Format-List # <-- uncomment this line for debug info
Invoke-Expression ("Get-ChildItem " + $MyInvocation.UnboundArguments -join " ")
}
Run Code Online (Sandbox Code Playgroud)
正确的版本myls应该能够处理没有参数的调用,带有一个带有命名参数的参数,来自包含多个分号分隔命令的行,并且参数中的变量包括包含空格的字符串变量.基本上,它应该是替代品ls.
下面的测试比较myls和内置ls:
[注意:输出省略和/或压缩以节省空间]
PS> md C:\p\d\x, C:\p\d\y, C:\p\d\"jay z"
PS> cd C:\p\d
PS> ls # no args
PS> myls # pass
PS> cd ..
PS> ls d # one arg
PS> …Run Code Online (Sandbox Code Playgroud)