我最近偶然发现了一些奇怪的事情:将一个布尔值转换为指针在Visual Studio 2013和2015中有效但在GCC和Clang上都没有(在3.5中尝试过).
#include <iostream>
using namespace std;
void foo(int *ptr)
{
std::cout << "foo";
}
int main()
{
foo(false);
}
Run Code Online (Sandbox Code Playgroud)
GCC出错:
main.cpp: In function 'int main()':
main.cpp:13:13: error: cannot convert 'bool' to 'int*' for argument '1' to 'void foo(int*)'
foo(false);
^
Run Code Online (Sandbox Code Playgroud)
我的猜测是将false转换为0,相当于NULL.更换调用foo的与foo(true)原因编译失败,每一个编译器.
所以我的问题是:这段代码应该编译吗?我没有看到将false转换为指针的好处,在我看来,它只会是误用/重构等错误的原因
我一直试图了解XMP元数据在过去几个小时内如何处理PNG文件,但无法完全理解它.
如果我用Photoshop创建一个PNG图像,保存并打开文件信息对话框(文件>文件信息或Ctrl + Alt + Shift + I),我可以看到一些XMP属性,如CreateDate,CreatorTool或ModifyDate.
现在如果我尝试用exiv2打开文件并读取元数据,它似乎找不到任何东西:
auto image = Exiv2::ImageFactory::open(imagePath);
image->readMetadata();
Exiv2::XmpData &xmpData = image->xmpData();
Run Code Online (Sandbox Code Playgroud)
同样的exiftool -xmp:all myImage.png,exiv2 -P X myImage.png甚至是GIMP(但我认为它在内部使用exiv2).
如果在使用Photoshop再次保存时未删除任何添加的元数据,则不会出现此问题.如果不清楚,打开图像并使用exiv2添加XMP元数据,保存它,在Photoshop和文件信息对话框中打开图像,之前添加的属性不再存在.
奇怪的是,如果你使用JPEG图像完成整个过程,一切都按预期工作:所有属性都可以从Photoshop和exiv2中看到,如果我尝试使用exiv2添加元数据(使用相同的代码),它会出现在Photoshop也是如此.
我错过了一些明显的东西吗 PNG有什么特别的东西不适合JPEG吗?我没有尝试使用Adobe的SDK来编辑XMP数据,这样更好吗?
任何帮助都会非常感激,因为这开始让我发疯:/
编辑:阅读这篇文章后,我尝试使用Adobe Bridge,它似乎没有显示与Photoshop相同的属性.如果我使用Exiv2添加XMP元数据,它们将显示在Bridge中,但如果我在Photoshop中修改图像,则元数据将再次从Bridge中删除.
我有一个Windows服务(Jenkins),它运行一个需要以特定用户身份运行命令的脚本.
我试图这样做,但它不起作用:
$secpasswd = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential("DOMAIN\myUsername", $secpasswd)
$Arguments = @()
$Arguments += "-Command"
$Arguments += "pwd"
$Arguments += ">"
$Arguments += "output.txt"
Start-Process powershell.exe -ArgumentList $Arguments -Credential $mycreds -NoNewWindow -WorkingDirectory $workingDir
Start-Sleep 2
Get-Content "$workingDir\output.txt"
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Start-Process : This command cannot be executed due to the error: Access is denied.
At C:\Windows\TEMP\hudson2382859596554223918.ps1:32 char:14
+ Start-Process <<<< powershell.exe -ArgumentList $Arguments -Credential $mycreds -NoNewWindow -WorkingDirectory $workingDir
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : …Run Code Online (Sandbox Code Playgroud) 最后,我在 Eclipse 中使用了大量 Java,并习惯了使用ctrl+ alt+o快捷方式自动添加导入。现在,我重新使用 Visual Studio 2010 进行 C++ 编码,我对没有这样的快捷方式感到有点恼火(或者我可能错过了它)。
这一定是可能的,因为智能感知会检测我想要使用的类,并在我声明新变量时向我显示所有可能性,它必须知道所需的标头在哪里。
该功能似乎存在于 Visual Studio 插件中:Visual Assist X。
编辑:关于这篇文章,VS2010 中似乎缺少该功能。这正是我正在寻找的功能:#include <set>在我编写的代码中std::set<int> myset;或任何自定义类中自动添加 when 。