我遇到一个非常奇怪的行为,我将其提炼为一个非常基本的测试:
#include <string>
#include <filesystem>
int main(void)
{
const std::string name = "foo";
const std::filesystem::path lock_dir = "/tmp";
std::filesystem::path lockfile = lock_dir / name;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用编译g++ -std=c++17 -Wall -Wextra -Werror -g foo.cpp -o foo。当我运行它时,在添加两个路径的那一行上,我得到了一个std :: bad_alloc异常。这是我在gdb中看到的
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff742c801 in __GI_abort () at abort.c:79
#2 0x00007ffff7a8e1f2 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff7a99e36 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff7a99e81 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff7a9a0b5 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 …Run Code Online (Sandbox Code Playgroud) 我需要将浮点数截断为最接近的 10 次方。例如,1.1 将截断为 1.0,4.7e3 将截断为 1e3。我目前正在做看似复杂的事情powf(10,floorf(log10f(x)))。我想知道是否有更好的性能(如更快的执行速度)解决方案?我的目标CPU架构是x86-64和arm64。
#include <stdio.h>
#include <math.h>
int main()
{
float x = 1.1e5f;
while (x > 1e-6f)
{
float y = powf(10,floorf(log10f(x)));
printf("%e ==> %g\n", x, y);
x /= 5.0f;
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,这会产生
1.100000e+05 ==> 100000
2.200000e+04 ==> 10000
4.400000e+03 ==> 1000
8.800000e+02 ==> 100
1.760000e+02 ==> 100
3.520000e+01 ==> 10
7.040000e+00 ==> 1
1.408000e+00 ==> 1
2.816000e-01 ==> 0.1
5.632000e-02 ==> 0.01
1.126400e-02 ==> 0.01
2.252800e-03 ==> 0.001
4.505600e-04 ==> 0.0001
9.011199e-05 …Run Code Online (Sandbox Code Playgroud) 在Qt中是否有一种独立于平台的方式来获取未使用的TCP端口?我需要启动一个现有的应用程序,必须给它一个开放的TCP端口才能使它工作.
我知道jq可以使用序列化的 JSON 字符串来格式化/过滤/修改内容。但是,据我所知,输出始终是人类可读的 JSON 形式。Bash 或其本身有没有办法jq对输出进行字符串化?
例如,给定
echo '{"foo" : "bar"}' | jq -r .
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个输出"{\"foo\" : \"bar\"}"
除非在枚举中派生出特征,Copy否则以下代码将无法编译。Clone鉴于枚举基本上是 ani8并且根据文档,整数自动实现 Copy 特征,为什么这是一个要求?与此相关的是,由于 的大小MyEnum在编译时应该是众所周知的,所以它不应该进入堆栈吗?这个特性不是Clone意味着它会在堆上吗?
#[derive(Debug, Copy, Clone)]
#[repr(i8)]
enum MyEnum {
Some1,
}
fn main() {
let x = MyEnum::Some1;
let y = x;
println!("x={:?} y={:?}", x, y);
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个类似于
public struct MyStruct
{
public float[] a;
}
Run Code Online (Sandbox Code Playgroud)
并且我想用一些自定义数组大小实例化一个这样的结构(在这个例子中假设为 2)。然后我将它编组到一个字节数组中。
MyStruct s = new MyStruct();
s.a = new float[2];
s.a[0] = 1.0f;
s.a[1] = 2.0f;
byte[] buffer = new byte[Marshal.SizeOf(typeof(MyStruct))];
GCHandle gcHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
try
{
Marshal.StructureToPtr(s, gcHandle.AddrOfPinnedObject(), false);
for (int i = 0; i < buffer.Length; i++)
{
System.Console.WriteLine(buffer[i].ToString("x2"));
}
}
finally
{
gcHandle.Free();
}
Run Code Online (Sandbox Code Playgroud)
这在我的 byte[] 中只给了我 4 个字节,它们看起来像一个指针值,而不是 1.0f 或 2.0f 的值。我已经四处寻找使这项工作起作用的方法,但到目前为止我能找到的都是类似的例子,其中结构数组的大小是提前知道的。没有办法做到这一点吗?
我正在使用 python 的 boto3 库来连接 AWS IoT。我想使用create_policy() API创建策略,但我不明白policyDocument字段要使用什么。我认为它与policyStatement有关,但我无法弄清楚语法。这是我到目前为止所拥有的。
from __future__ import print_function
import os
import sys
import boto3
from botocore.exceptions import ClientError
from colorama import Fore, Back, Style
from colorama import init
init()
thingType = 'TpmStation'
thingBaseName = thingType + '-'
thingPolicy = thingType + '-Policy-GenDerivedKey'
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
try:
# Use system hosted credentials - see
# http://docs.aws.amazon.com/cli/latest/userguide/installing.html
# http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
client = boto3.client('iot')
policyDocument = {}
policyDocument['Statement'] = []
policyDocument['Statement'].append({}) …Run Code Online (Sandbox Code Playgroud)