小编Leś*_*ajs的帖子

宇宙飞船操作员出现整洁的解析错误

使用clang++-11withlibstdc++-11clang-tidy-11,我在用 linting 代码时遇到了失败clang-tidy- 即在处理众所周知的 sleeper 时出现解析错误std::this_thread::sleep_for(std::chrono::seconds(1));

clang-tidy-11 -header-filter=include/ -p=/tmp/dev/build/bin/aggregation/ -quiet /tmp/de
v/build/aggregation/src/main.cc
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: clang-tidy-11 -header-filter=include/ -p=/tmp/dev/build/bin/
aggregation/ -quiet /tmp/dev/build/aggregation/src/main.cc
1.      <eof> parser at end of file
2.      While analyzing stack:
        #0 Calling std::chrono::operator<=> at line /usr/include/c++/11/thread:125:6
        #1 Calling std::this_thread::sleep_for at line 159
        #2 Calling main
3.      /usr/include/c++/11/chrono:771:9: Error evaluating statement
4.      /usr/include/c++/11/chrono:771:9: Error evaluating …
Run Code Online (Sandbox Code Playgroud)

c++ clang c++20 clang-tidy

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

static_cast带走了constness

根据我的知识(以及这个主题:什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?)const_cast是唯一应该能够取消变量constness的转换.然而,当我搞砸了clang-6.0,g++5.4.0我偶然发现了一个与上述相反的行为.看起来static_cast完全一样.

这些主要功能与两个编译器提供完全相同的结果:

测试类定义

struct Base {
        Base() {
                std::cout << "Base::Base()\n";
        }
        void test() const {
                std::cout << "Base::test()\n";
        }

        void no_const() {
                std::cout << "Base::no_const()\n";
        }

        virtual ~Base() = default;
};
Run Code Online (Sandbox Code Playgroud)

const_cast

int main(void) {
        std::cout << "BEGIN\n";
        const Base b;
        const_cast<Base&>(b).no_const();

        std::cout << "END\n";
}
Run Code Online (Sandbox Code Playgroud)

static_cast

int main(void) {
        std::cout << "BEGIN\n";
        const Base b;
        static_cast<Base>(b).no_const();

        std::cout << "END\n";
}
Run Code Online (Sandbox Code Playgroud)

结果:

BEGIN
Base::Base()
Base::no_const() …
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
74
查看次数

g ++打破std :: filesystem :: last_write_time中的更改

在最近的OS升级中,我注意到我的代码中的一小部分停止了编译-看来原因是从切换g++-8g++-9

这段代码可以正常编译g++ 8.3.0(使用gcc:8.3Dockerhub的图像对此进行了验证)

#include <filesystem>
#include <chrono>

int main() {
    namespace fs = std::filesystem;
    using namespace std::chrono_literals;
    std::filesystem::last_write_time("test", std::chrono::system_clock::now() - 5min);
}
Run Code Online (Sandbox Code Playgroud)

g++ 9.1.0它失败与:

test.cpp: In function 'int main()':
test.cpp:8:69: error: no matching function for call to 'last_write_time(const char [5], std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >)'
    8 |  fs::last_write_time("test", std::chrono::system_clock::now() - 5min);
      |                                                                     ^
In file included from /usr/local/include/c++/9.1.0/filesystem:39,
                 from test.cpp:1:
/usr/local/include/c++/9.1.0/bits/fs_ops.h:243:19: note: candidate: 'std::filesystem::file_time_type std::filesystem::last_write_time(const std::filesystem::__cxx11::path&)'
  243 | …
Run Code Online (Sandbox Code Playgroud)

c++ g++ c++17

4
推荐指数
1
解决办法
199
查看次数

Roo不赞成使用roo方法

在Windows上使用roo gem,代码如下:

require 'roo'
require 'roo-xls'

workbook = Roo::Excel.new 'test.xls'
Run Code Online (Sandbox Code Playgroud)

我收到了STDOUT的消息

[DEPRECATION] extend Roo::Tempdir and use its .make_tempdir instead
Run Code Online (Sandbox Code Playgroud)

代码工作正常后,我能够做我想要的每一件事.但是,我想摆脱这个消息(没有创建一个新的类或类似的东西,它只是打开一个文件......对吗?).我怎么做?

ruby xls roo-gem

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

覆盖 gcc9 和 lcov

最近的操作系统升级使我的覆盖脚本惨遭失败。

lcov 1.13

gcov (GCC) 9.1.1

我的 CMake 中用于生成覆盖率数据的部分:

if ($ENV{COVERAGE})
    message("Setting up for coverage")
    enable_testing()
    include(CodeCoverage)
    setup_target_for_coverage(${PROJECT_NAME}_coverage tests coverage)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  --coverage")
endif ()
Run Code Online (Sandbox Code Playgroud)

lcov我在构建测试后发出的命令: lcov --capture --directory build/ --output-file coverage.info

不幸的是现在失败了:

Capturing coverage data from build/
Found gcov version: 9.1.1
Scanning build/ for .gcda files ...
geninfo: WARNING: no .gcda files found in build/ - skipping!
Finished .info-file creation
Run Code Online (Sandbox Code Playgroud)

错误消息是有道理的,因为没有.gcda文件 - 只有.gcno文件。我不确定它们是否具有相同的目的和/或可以与lcov.

我发出了nm some_binary | grep gcov,有很多符号的形式:

00000000004b3520 d …
Run Code Online (Sandbox Code Playgroud)

c++ code-coverage cmake gcov lcov

2
推荐指数
1
解决办法
1863
查看次数

使用?内部封闭

我有这个简单的解析功能

use std::collections::BTreeMap;

fn parse_kv(data: &str) -> BTreeMap<String, String> {
    data.split('&')
        .map(|kv| kv.split('='))
        .map(|mut kv| (kv.next().unwrap().into(), kv.next().unwrap().into()))
        .collect()
}

#[test]
fn parse_kv_test() {
    let result = parse_kv("test1=1&test2=2");
    assert_eq!(result["test1"], "1");
    assert_eq!(result["test2"], "2");
}

Run Code Online (Sandbox Code Playgroud)

一切正常,但是我想要这样的Option或Result返回类型:

fn parse_kv(data: &str) -> Option<BTreeMap<String, String>>
Run Code Online (Sandbox Code Playgroud)

此实现:

fn parse_kv(data: &str) -> Option<BTreeMap<String, String>> {
    Some(data.split('&')
        .map(|kv| kv.split('='))
        .map(|mut kv| (kv.next()?.into(), kv.next()?.into()))
        .collect())
}
Run Code Online (Sandbox Code Playgroud)

不幸的是给出了以下错误:

error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
  --> …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何获得 Rust 中最大值元素的迭代器?

我想访问 a 中最大元素旁边的元素Vec<i32>。我正在寻找这样的东西:

let v = vec![1, 3, 2];
let it = v.iter().max_element();
assert_eq!(Some(&2), it.next());
Run Code Online (Sandbox Code Playgroud)

在 C++ 中,我会使用std::max_element然后只增加迭代器(有或没有边界检查,取决于我此刻的冒险精神)。Rustmax只返回对元素的引用,这对我的用例来说不够好。

我想出的唯一解决方案是使用enumerate获取项目的索引 - 但与 C++ 方式相比,这似乎是手动且繁琐的。

我更喜欢标准库中的东西。

这个例子是简化的——我实际上想附加到最高值,然后从那个点循环整个容器(可能是cycle()或类似的东西)。

iterator rust

1
推荐指数
2
解决办法
2916
查看次数

输出上的随机数

我是C++的初学者,目前我正在学习如何做功能.最近我收到了以下练习:

#include <iostream> 
#include <string> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    int a,sum=0; 
    cout<<"Enter a number:"; 
    cin>>a; 

    int func(int x);
    sum=func (a );

    cout<<"\n"<<sum;
}

int func(int a)
{
    int x;
    for (int i=0; i<=a; i++)
    {
        x+=i;   
    }
    return x;      
} 
Run Code Online (Sandbox Code Playgroud)

我已经提前给了代码的int主要部分,我需要做的是完成int func部分,以便代码正确执行.如果我运行此代码,我只会得到一些随机数.什么是func应该做的是返回由用户估算数量的限制所有自然数的总和.你能告诉我如何更改这段代码才能正常工作?感谢您的任何反馈!

c++ function

0
推荐指数
1
解决办法
96
查看次数

指向成员属性的指针

我有一个功能f(unsigned char ** data);.另外,我有一个指向pObj 带有unsigned char* pbCert成员的对象的指针.因此,我想执行如下操作:

f(pObj->&pbCert);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到了member identifier expected错误.

我设法使用这种方法解决问题:

unsigned char* temp = pObj->pbCert;
f(&temp);
Run Code Online (Sandbox Code Playgroud)

但是我很好奇,是否有一些聪明的记法技巧只在一行中做到这一点?

c

0
推荐指数
1
解决办法
43
查看次数

标签 统计

c++ ×5

rust ×2

c ×1

c++17 ×1

c++20 ×1

clang ×1

clang-tidy ×1

cmake ×1

code-coverage ×1

function ×1

g++ ×1

gcov ×1

iterator ×1

lcov ×1

roo-gem ×1

ruby ×1

xls ×1