小编Sam*_*rty的帖子

SQL - 插入行并返回主键

我有点诙谐的问题.比如说,我在一个存在主键的表中插入了一些包含一些数据的行.如何"选择"刚刚插入的行的主键?

我应该更具体,并提到我目前正在使用SQLite.

sql sqlite row insert primary-key

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

将&mut引用传递给接受通用类型的函数后,为什么不能重用它?

该代码为什么不编译:

fn use_cursor(cursor: &mut io::Cursor<&mut Vec<u8>>) {
    // do some work
}

fn take_reference(data: &mut Vec<u8>) {
    {
        let mut buf = io::Cursor::new(data);

        use_cursor(&mut buf);
    }

    data.len();
}

fn produce_data() {
    let mut data = Vec::new();
    take_reference(&mut data);
    data.len();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下的错误是:

fn use_cursor(cursor: &mut io::Cursor<&mut Vec<u8>>) {
    // do some work
}

fn take_reference(data: &mut Vec<u8>) {
    {
        let mut buf = io::Cursor::new(data);

        use_cursor(&mut buf);
    }

    data.len();
}

fn produce_data() {
    let mut data = Vec::new();
    take_reference(&mut data);
    data.len();
} …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

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

返回rvalue引用vs函数返回类型中的返回值

在我的代码中,我有一个函数,它从一段数据构造一个字符串然后返回它.此字符串不会在其他任何地方使用,因此接收方可以安全地使用移动分配或移动初始化.

std::string ReadString(...) {
    ...
    return std::string(...)
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是我所拥有的.在函数返回类型std :: string &&中是否有任何意义,因为返回的值是rvalue?

std::string&& ReadString(...) {
    ...
    return std::string(...)
}
Run Code Online (Sandbox Code Playgroud)

我担心的是,当我们返回字符串时可能会有一个多余的副本,并且可以通过使返回类型为右值引用来缓解它.

我怀疑编译器也可以针对这些场景进行优化,但是,我不确定.

所以问题是 - 在这种情况下,返回类型是否为rvalue引用有什么意义?为什么?此外,如果没有,那么返回右值引用的函数有哪些可能的应用程序?

谢谢.

c++ rvalue rvalue-reference pass-by-rvalue-reference

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

独立于方法返回RWLockReadGuard

我有一个类型的对象

Arc<RwLock<SessionData>>
Run Code Online (Sandbox Code Playgroud)

我有一种方法应该参考某种形式 SessionData

fn some_method(session: ...)
Run Code Online (Sandbox Code Playgroud)

我正在使用Rocket(Rust的Web框架),我不能直接调用该方法,因为它是由Rocket调用的。但是,我可以为它提供一个实现,该实现创建一个将传递给处理程序的对象。它看起来像这样:

impl<'a, 'r> request::FromRequest<'a, 'r> for SomeType {
    type Error = ();

    fn from_request(request: &'a request::Request<'r>) -> request::Outcome<Self, Self::Error> {
        // return object here
    }
}
Run Code Online (Sandbox Code Playgroud)

我想避免RwLock直接返回一个,因为我希望处理程序将一个已经锁定的对象传递给它。但是,我无法返回引用或RwLockReadGuard,因为它们都依赖RwLock,这将超出范围。

相反,我尝试创建某种自给自足的类型,该类型将包含一个Arc<RwLock<SessionData>>,包含此锁的锁保护并取消引用到一个SessionData对象。

到目前为止,我已经尝试了以下几种组合:

  • Session包含一个对象Arc<RwLock<SessionData>>和一个RwLockReadGuard<SessionData>
  • 一个包含一个对象Arc<RwLock<SessionData>>和一个RwLockReadGuardRef<SessionData>所属-REF库。
  • 将使用owning-ref库中的OwnedHandle类型的对象。

但是,我一直无法做自己想做的事,遇到了各种各样的终身借贷问题。

是否有可能创建一种自成一体的类似“句柄”的对象,同时包含指向它指向的对象的锁和锁保护装置?

这与如何返回对互斥量下的值的子值的引用中所描述的情况类似但略有不同。在其中,MutexGuardRef内部依赖Mutex,如果Mutex(或MyStruct)超出范围,则内部不存在。为了实现类似的行为,我必须传递一个包含我的结构, …

rust rwlock borrow-checker

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

byte [] byteArray = anotherByteArray做什么?

如果这个问题非常容易回答,我会立即道歉,但我以前从未处理过Java,而且我甚至不知道如何正确地表达这个问题.让我们假设以下代码片段(在Java中):

byte[] arrayOfBytes1;
int i = 16;
arrayOfBytes1 = new byte[i];

byte[] arrayOfBytes2 = arrayOfBytes1;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,arrayOfBytes2究竟是什么?它是arrayOfBytes1的独立副本,还是会引用它?提前致谢.

PS哦,如果有人可以提供C/C++模拟,那将是非常有帮助的.

java arrays byte constructor

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

用更好的替代品替换reinterpret_cast?

我在我的项目中有几个地方,我使用reinterpret_cast从流中读取/写入无符号整数.考虑以下功能:

size_t ReadSize(std::stringstream& stream) {
  char buf[sizeof(size_t)];
  stream.read(buf, sizeof(size_t));
  return *(reinterpret_cast<size_t*>(buf));
}

void WriteSize(std::stringstream& stream, size_t n) {
  stream.write(reinterpret_cast<char*>(&n), sizeof(size_t));
}
Run Code Online (Sandbox Code Playgroud)

我开始觉得使用reinterpret_cast有点不舒服,即使我没有遇到任何问题,所以我想知道,有更好的替代品吗?假设我在流中只有4个字节应该代表这个整数.

我认为static_cast也不适用于此处.有小费吗?

PS我目前不关心使用reinterpet_cast可能引起的可移植性或其他特定于平台的问题.我正在为Windows机器编写这个.

c++ reinterpret-cast

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

控制Linux中的文本模式输出| C/C++

首先,我为可能发生的任何问题道歉,因为我不太确定如何正确地提出这个问题.

我最近很好奇一些应用程序(如Midnight Commander)如何控制文本模式输出,形成所谓的"基于文本的用户界面",idk.这是标准输出操作的一些邪恶魔法还是我不知道的其他东西?我做了一些围绕谷歌,但没有找到任何特别感兴趣的东西,我希望这里的人可以指出我正确的方式.

提前致谢,

〜失眠阵列

linux text interface mode

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