小编PEA*_*EAR的帖子

为什么使用LTO会增加Rust二进制文件的大小?

介绍

我完成了一个带有以下依赖项的小型Rust项目(大约300行代码):

问题

cargo build --release没有进一步配置的情况下使用时,会生成2.942.744字节(= 2,8 MiB)的二进制数.我尝试通过启用链接时间优化(LTO)来优化这一点Cargo.toml:

[profile.release]
lto = true
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,二进制文件增长了,新的大小为3.848.288字节(= 3,7 MiB).

怎么解释这个?我配置Cargo有什么错吗?

compiler-optimization rust lto

16
推荐指数
2
解决办法
1896
查看次数

将字符串转换为long

我正在尝试将字符串转换为long.这听起来很容易,但我仍然得到同样的错误.我试过了:

include <iostream>
include <string>    

using namespace std;

int main()
{
  string myString = "";
  cin >> myString;
  long myLong = atol(myString);
}
Run Code Online (Sandbox Code Playgroud)

但总是错误:

.../main.cpp:12: error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'long int atol(const char*)'
Run Code Online (Sandbox Code Playgroud)

发生.参考文献如下:

long int atol ( const char * str );
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

c++ string

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

C++中的实际millis

是否有可能获得实际的毫秒数,因为我不知道在C++程序中如System.currentTimeMillis()Java?我知道time(),但我认为短时间测量不够,是吗?

c++ time c++-chrono

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

在HashMap-value之后匹配比克隆它更优雅的方式

我正在使用Rust编程语言学习Rust .我在处理闭包章节中正在处理以下任务:

尝试修改Cacher以保存哈希映射而不是单个值.哈希映射的键将arg是传入的值,并且哈希映射的值将是在该键上调用闭包的结果.值函数不会查看是否self.value直接具有值SomeNone值,而是arg在哈希映射中查找并返回值(如果存在).如果它不存在,Cacher则将调用闭包并将结果值保存在与其arg值相关联的哈希映射中.

这是我的解决方案:

use std::collections::HashMap;

struct Cacher<T>
where
    T: Fn(i32) -> i32,
{
    calculation: T,
    values: HashMap<i32, i32>,
}

impl<T> Cacher<T>
where
    T: Fn(i32) -> i32,
{
    fn new(calculation: T) -> Cacher<T> {
        Cacher {
            calculation,
            values: HashMap::new(),
        }
    }
    fn value(&mut self, arg: i32) -> i32 {
        match self.values.get(&arg) {
            Some(v) => *v,
            None => { …
Run Code Online (Sandbox Code Playgroud)

hash caching rust

5
推荐指数
0
解决办法
408
查看次数

QtCreator返回错误"无法更改为工作目录"

我正在尝试使用Qt Creator Code运行一个简单的HelloWorld程序:

#include <iostream>

using namespace std;

int main()
{
  cout << "Hello World!" << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行时发生错误

Cannot change to working directory '/home/myusername/build-myproject-Desktop-Debug': file or directory not found
Run Code Online (Sandbox Code Playgroud)

互联网上的许多教程告诉我禁用"在终端中运行",但我需要这个用于我的项目.我的工作目录是/ home/myusername/build-myproject-Desktop-Debug

有帮助吗?

c++ linux qt qt-creator

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

防止图书馆内部资料在.h中可见

首先要做的事情是:我知道我的问题很可能是基于一般的误解,但我希望我能向你表明我的观点.

我知道在将代码放入C++中的不同文件时,我们确实创建了一个.h(用于定义)和一个.cpp(用于实现).例如,在编写类库时,我必须在头文件中放置私有和公共成员的definitioj.但是,如果 - 出于某种原因 - 我想隐藏用户的私人信息该怎么办?

谢谢!

c++ header libraries

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

枚举的多重定义

我在include.h中有一个名为Color,Return_main_menue和Playertype的枚举,如下所示:

enum Color { Red, Orange, Grey, Blue, Green, White, Purple };
enum Return_main_menue { Start, Credits, Help };
enum Playertype { Computer, Human };
Run Code Online (Sandbox Code Playgroud)

我还有一个名为tools.cpp的源文件和tools.h tools.h:

#include "including.h"
Return_main_menue mainmenue();
Run Code Online (Sandbox Code Playgroud)

tools.cpp:

Return_main_menue mainmenue()
{
// function which return Start, Credits or Help
}
Run Code Online (Sandbox Code Playgroud)

我在main.cpp中使用mainmenue():

Return_main_menue mainm = mainmenue();
Run Code Online (Sandbox Code Playgroud)

但编译器返回错误:

.../einbindung.h:7: error: multiple definition of 'enum Farbe'
.../einbindung.h:7: error: previous definition here
and so on for the other enums
Run Code Online (Sandbox Code Playgroud)

c++ multiple-definition-error

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

如何借用未包装的 Option&lt;T&gt;?

我想使用 .iter_mut()and.map()

fn calculate_distances(planes : &mut Vec<Aeroplane>, x: f64, y: f64) {
    fn calculate_distance(x1: &f64, y1: &f64, x2: &f64, y2: &f64) -> f6 { ... }
    planes.iter_mut().map(|a| if a.position.is_some() {
        let pos: &Position = &a.position.unwrap();
        a.distance = Some(calculate_distance(&x, &y, &pos.latitude, &pos.longitude));
    });
}
Run Code Online (Sandbox Code Playgroud)

Aeroplane 包含我的实例 Position结构:

struct Position {
    latitude: f64,
    longitude: f64,
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我只是借用了位置信息并没有移出任何东西,但是借用检查器拒绝了我的代码:

fn calculate_distances(planes : &mut Vec<Aeroplane>, x: f64, y: f64) {
    fn calculate_distance(x1: &f64, y1: &f64, x2: &f64, y2: &f64) -> f6 …
Run Code Online (Sandbox Code Playgroud)

closures ownership rust

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