小编Kni*_*chi的帖子

在此示例中,赋值运算符重载解析如何工作?结果对我来说意外

这是我不理解的代码:

class Base
{
public:
    Base(){}

    Base operator=(Base ob2)
    {
        std::cout << "Using Base operator=() " << '\n';
        return *this;
    }
};

class Derived : public Base
{
public:
    Derived(){}
    Derived operator=(Base ob2)
    {
        std::cout << "Using Derived operator=() " << '\n';
        return *this;
    }
};

int main()
{
    Derived derived1, derived2;
    Base base1;

    derived1 = derived2;  // Uses base operator=()

    derived1 = base1;  // Uses derived operator=()

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

确定的第一个赋值使用Base类的运算符,第二个赋值使用Derived类的运算符的语言规则是什么?

是的,我知道通常不会像这样声明赋值运算符.这就是为什么我称它为accademical.

c++ operator-overloading overload-resolution

14
推荐指数
1
解决办法
3083
查看次数

如何通过groovy脚本控制台批准jenkins文件中的脚本片段?

在我的jenkins管道文件中,我使用从.json文件JsonSlurperClassic中读取构建配置.但是,这会引入需要通过进程内脚本批准页面批准的代码.当我在GUI上执行此操作时,此工作正常.

但是我还有一个脚本可以自动设置我的jenkins机器,它应该创建一个不需要进一步GUI操作的现成工作机器.此脚本已使用jenkins脚本控制台批准从属启动命令.在脚本控制台中执行此操作的groovy代码如下所示.

def language = 'system-command';
def scriptSnippet = 'ssh me@slavemachine java -jar ~/bin/slave.jar';

def scriptApproval = Jenkins.instance.getExtensionList(
    'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0];
def scriptHash = scriptApproval.hash(scriptSnippet, language);
scriptApproval.approveScript(scriptHash);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在我想使用相同的代码来批准来自我的管道的脚本片段.我交换了前两行

def language = 'groovy'
def scriptSnippet = 'new groovy.json.JsonSlurperClassic';
Run Code Online (Sandbox Code Playgroud)

其中,scriptSnippet从所拍摄的scriptApproval.xml文件.执行此操作会<approvedScriptHashes>scriptApproval.xml文件添加新条目,但不会删除<pendingSignature>包含脚本片段的条目.这意味着它不起作用.

我的猜测是,这种语言是错误的,但我试过的其他价值观groovy-sh或者system-commands也没有用.你有什么想法它不起作用吗?

感谢您的时间.

jenkins jenkins-pipeline

13
推荐指数
2
解决办法
5061
查看次数

clang-tidy:如何压制警告?

我最近开始尝试clang-tidyllvm 的工具.现在我试图压制来自第三方库代码的错误警告.为此,我想使用命令行选项

-header-filter=<string> 要么 -line-filter=<string>

但到目前为止没有成功.所以对于时间有限的人,我会在开头提出这个问题,然后再解释我已经尝试过的问题.

我需要为clang-tidy工具提供什么选项来抑制来自某个行和文件的警告?

如果这是不可能的

什么选项可以抑制外部头文件的警告?


到目前为止我做了什么

我对clang-tidy的原始调用看起来像这样

clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p Generated/LinuxMakeClangNoPCH Sources/CodeAssistant/ModuleListsFileManipulator_fixtures.cpp
Run Code Online (Sandbox Code Playgroud)

我要压制的产生警告的第一行看起来像这样

.../gmock/gmock-spec-builders.h:1272:5: warning: Use of memory after it is freed [clang-analyzer-cplusplus.NewDelete]
    return function_mocker_->AddNewExpectation(
Run Code Online (Sandbox Code Playgroud)

gmock人告诉我,这是一个误报,所以我想压制它.首先,我尝试使用该-line-filter=<string>选项.文件说:

  -line-filter=<string>      - List of files with line ranges to filter the
                               warnings. Can be used together with
                               -header-filter. The format of the list is a JSON
                               array of objects:
                                 [
                                   {"name":"file1.cpp","lines":[[1,3],[5,7]]},
                                   {"name":"file2.h"}
                                 ]
Run Code Online (Sandbox Code Playgroud)

我假设过滤掉了给定行中的警告.但doc doesent表示如果它们被过滤掉或者已经过滤了.在一些fiddeling arround之后我创建了一个包含内容的.json文件

[
  {"name":"gmock-spec-builders.h","lines":[[1272,1272]]}
]
Run Code Online (Sandbox Code Playgroud)

并将命令行修改为

clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p …
Run Code Online (Sandbox Code Playgroud)

suppress-warnings clang-static-analyzer clang-tidy

12
推荐指数
2
解决办法
8546
查看次数

CMake:有没有办法获得属于包的导入目标列表

有时我会得到一个属于包的导入目标列表.是否有一个包含它们的变量?

这将允许我写这样的东西

find_package(Qt5 CONFIG REQUIRED)
message("Imported Qt5 targets: ${Qt5_IMPORTED_TARGETS}") # speculative code
Run Code Online (Sandbox Code Playgroud)

根据我目前的知识,我必须依赖包的文档来给我所有导入目标的名称.从变量或属性中读取它们会更容易.

cmake package

11
推荐指数
1
解决办法
555
查看次数

将www.github.com添加到known_hosts文件的安全/正确方法是什么?

我想通过ssh访问我的github存储库.当我第一次访问存储库时,系统会询问是否要将github ssh服务器添加到我的known_hosts文件中,这样可以正常工作.该请求也让我发现服务器的RSA密钥的指纹,我可以手动验证它是由github上提供的相同位置.

这些是OpenSSH 6.8和更新版本(以base64格式)显示的SHA256哈希:

SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 (RSA)
SHA256:br9IjFspm1vxR3iA35FWE+4VTyz1hYVLIE2t1/CeyWQ (DSA)
Run Code Online (Sandbox Code Playgroud)

问题是我想known_hosts在第一次访问我的git存储库之前通过向我的文件添加公钥来阻止该请求.这可以通过使用ssh-keyscan -t rsa www.github.com命令来完成,该命令将以known_hosts文件所需的格式提供公钥.但人们反复提到,这不安全,容易受到中间人攻击.他们没有提到的是如何正确地做到这一点.

那么如何使用github页面上提供的RSA指纹安全地获取ssh服务器的公共主机密钥呢?我或多或少地寻找一个ssh-keyscan命令的选项,让我添加预期的rsa指纹,并导致命令失败,如果主机指纹与给定的指纹不匹配.

感谢您的时间!

ssh openssh github

8
推荐指数
2
解决办法
2364
查看次数

是否可以在Visual Studio中将文件添加到CMake生成的解决方案文件夹?

这个问题或多或少是这个问题的热身:

如何让cmake将文件添加到msvcs解决方案树

它从来没有得到有效的答案,所以我想稍微改变它:

是否可以使用cmake 2.8.3引入的cmake解决方案文件夹将文件直接添加到vs解决方案?我想做相当于VS-> Solution-> Add-> Existing Item的cmake.因此,我的文件将出现在属于解决方案的文件夹中,而不是项目中.

我找到了一些示例,如何使用解决方案文件夹将目标分组到文件夹中,代码如下:

set_property( GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test") 
Run Code Online (Sandbox Code Playgroud)

那么我可以在文件夹中添加文件而不是目标吗?

c++ cmake visual-studio

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

初始化列表中的QString导致访问冲突.这里出了什么问题?

我在初始化列表中使用QString时遇到了访问冲突,我不明白.

这是一个重现问题的最小例子.

// file ClassA.h
#pragma once
#include <QString>

struct Parameter
{
    QString stringPar;
};

class ClassA
{
     QString m_string1;

public:
    void function(Parameter pars);
};
Run Code Online (Sandbox Code Playgroud)

ClassA的实施......

// file ClassA.cpp
#include "ClassA.h"

void ClassA::function(Parameter pars)
{
    m_string1 = pars.stringPar;   // last line called in my code when the crash happens
}
Run Code Online (Sandbox Code Playgroud)

和main.cpp

// file main.cpp
#include "ClassA.h"

int main()
{
    ClassA classA;

    classA.function({ QString("jkjsdghdkjhgdjufgskhdbfgskzh") });

    // when using this code the problem does not occur
    //Parameter par = { QString("jkjsdghdkjhgdjufgskhdbfgskzh") }; …
Run Code Online (Sandbox Code Playgroud)

c++ qt access-violation initializer-list visual-c++

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

什么是等同于curl --data-urlencode调用的python请求软件包?

我正在使用以下命令行调用在jenkins CLI服务器上执行groovy脚本:

curl --user 'Knitschi:myPassword' -H "Jenkins-Crumb:1234" --data-urlencode "script=println 'Hello nice jenkins-curl-groovy world!'" localhost:8080/scriptText
Run Code Online (Sandbox Code Playgroud)

我目前正在将bash脚本转换为python,我想使用python 请求包(http://docs.python-requests.org/en/master/)做与上述调用等效的操作。

到目前为止,我有

import requests

url = 'http://localhost:8080/scriptText'
myAuth = ('Knitschi', 'myPassword')
crumbHeader = { 'Jenkins-Crumb' : '1234'}
scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"

response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

当命令行打印期望的字符串时,python代码不会。它也不会引发异常。

另外,我不确定是否应该使用requests.get()requests.post()。我的网络技术知识非常有限。

感谢您的时间。

jenkins python-requests

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

我可以在我的cmake代码中手动使用CMake的cpp文件依赖扫描程序吗?

我试图用CMake添加一个自定义目标,为每个给定的.cpp文件执行一个命令.只有在源文件本身或其中一个包含的源文件发生更改时,才应重新执行该命令.AFAIK实现这一点我需要一个包含所有包含文件的列表,并将它们添加到属于我的自定义目标DEPENDSadd_custom_command()调用选项中.

那么是否有内置的方法来获取包含文件的列表?

我知道函数的IMPLICIT_DEPENDS选项,add_custom_command()但它只适用于Makefile生成器.我想为所有发电机做这项工作.

感谢您的时间

编辑:

根据要求,我将发布一些cmake代码来展示我想要实现的目标.我想添加一个自定义目标,在所有给定的.cpp文件上运行clang-tidy.当逐步构建自定义目标时,只要更改.cpp文件或其直接或间接包含的头文件之一,就应重新运行clang-tidy命令.就像重新运行编译器一样.

# ----------------------------------------------------------------------------------------
# mainTargetName The name of the target that shall be analyzed
# files A list of all the main targets .cpp files
#
function( addStaticAnalysisTarget mainTargetName files )

    set(targetName runStaticAnalysis_${mainTargetName})
    set(command "clang-tidy-4.0 -checks=* -p ${CMAKE_BINARY_DIR}")

    foreach( file ${files}  )

        get_filename_component( baseName ${file} NAME_WE)
        set(stampFile ${CMAKE_CURRENT_BINARY_DIR}/analyze_${baseName}.stamp )
        set(fullFile ${CMAKE_CURRENT_SOURCE_DIR}/${file})
        set(commandWithFile "${command} ${fullFile}")
        separate_arguments_for_platform( commandList ${commandWithFile})

        add_custom_command(
            OUTPUT ${stampFile}
            DEPENDS "${fullFile}"
            IMPLICIT_DEPENDS CXX "${fullFile}"
            COMMAND ${commandList} …
Run Code Online (Sandbox Code Playgroud)

c++ cmake add-custom-command

5
推荐指数
1
解决办法
347
查看次数

CMake:如何添加仅对一种配置执行的自定义命令?

我想添加一个 cmake 自定义命令,该命令仅在使用 Visual Studio 多配置生成器时在调试配置中构建自定义目标时才执行。有没有干净的方法来做到这一点?

为了实现这一点,我首先尝试将整个命令列表包装在这样的生成器表达式中。

add_custom_command(
    ...
    COMMAND $<$<CONFIG:Debug>:cmake;-E;echo;foo>
)
Run Code Online (Sandbox Code Playgroud)

但这在执行命令时给了我一个语法错误。经过一些反复试验,我得到了以下hacky解决方案。这将命令列表的每个单词包装在这样的生成器表达式中。

add_custom_command(
    ...
    COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)
Run Code Online (Sandbox Code Playgroud)

这会cmake -E echo foo在编译 Debug 配置时执行该命令,并echo " " " " " "为所有其他配置执行 dummy 命令。

这非常难看,必须根据主机系统更改虚拟命令。在 Linux 上它可能是":" ":" ":" ":". 那么有没有更干净的方法来做到这一点?

感谢您的时间!

cmake add-custom-command

5
推荐指数
1
解决办法
3118
查看次数