小编Ufl*_*lex的帖子

在C++中将bool(false)转换为合法的指针?

我最近偶然发现了一些奇怪的事情:将一个布尔值转换为指针在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转换为指针的好处,在我看来,它只会是误用/重构等错误的原因

c++ gcc clang visual-studio language-lawyer

16
推荐指数
1
解决办法
993
查看次数

PNG图像是否支持XMP元数据?

我一直试图了解XMP元数据在过去几个小时内如何处理PNG文件,但无法完全理解它.

如果我用Photoshop创建一个PNG图像,保存并打开文件信息对话框(文件>文件信息或Ctrl + Alt + Shift + I),我可以看到一些XMP属性,如CreateDate,CreatorToolModifyDate.

现在如果我尝试用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中删除.

photoshop xmp metadata exiv2

6
推荐指数
1
解决办法
1749
查看次数

如何使用用户凭据在Powershell中运行Start-Process?

我有一个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)

powershell jenkins

4
推荐指数
2
解决办法
4万
查看次数

在 Visual Studio 2010 中是否有自动包含类的快捷方式?

最后,我在 Eclipse 中使用了大量 Java,并习惯了使用ctrl+ alt+o快捷方式自动添加导入。现在,我重新使用 Visual Studio 2010 进行 C++ 编码,我对没有这样的快捷方式感到有点恼火(或者我可能错过了它)。

这一定是可能的,因为智能感知会检测我想要使用的类,并在我声明新变量时向我显示所有可能性,它必须知道所需的标头在哪里。

该功能似乎存在于 Visual Studio 插件中:Visual Assist X

编辑:关于这篇文章,VS2010 中似乎缺少该功能。这正是我正在寻找的功能:#include <set>在我编写的代码中std::set<int> myset;或任何自定义类中自动添加 when 。

c++ visual-studio-2010

3
推荐指数
1
解决办法
9400
查看次数