问题列表 - 第318127页

如何让我的终端在 C++ 中的空 cin 输入上退出?

我找不到一种方法让我的终端在空输入时退出程序。我有:

int main(int argc, char const* argv[]) {
    // Write your code here
    // Define variables

    set<string> words;  // The set
    bool more = true;     //  Flag indicating there are more lines to read

    // If there is no command line argument, use stdin to get the lines
    if (argc == 1){

        // Take lines in until a blank line is entered
        while (more) {

            // Get next line from stdin
            string input;
            cin >> input;

                // Quit if we …
Run Code Online (Sandbox Code Playgroud)

c++ terminal stdstring is-empty

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

有人可以解释为什么现代 C++ 构造函数语法中的对象名称后面有一个分号吗?例如,在构造函数中... rd; {};

大约 20 年前,我曾经写过一些 c++。我需要重新做一些工作,但事情已经改变了。尽管在 Stroustrup 的 c++ 书中的第四版中进行了搜索,但我确实不理解一些新语法。我正在使用 Apple clang 版本 15.0.0 (clang-1500.1.0.2.5) 目标:arm64-apple-darwin23.3.0 线程模型:posix。在构造函数中,我希望使用 rd{}; 之类的语法来初始化对象。我不明白为什么编译器想要在对象名称后面加一个分号,例如 rd;{};

以下代码编译并运行 - 我只是不明白注释中指出的部分。

#include <iostream>
#include <random>

using namespace std;

class normRand {

public:

    random_device rd;
    mt19937 gen;
    normal_distribution<double>  dist;

    normRand() {
          // The constructor is meant to initialise the Mersenne twister
          // random number generator with a seed from some device and then
          // use this generator to randomly select values from a standard
          // normal distribution.
      
          // Why is there …
Run Code Online (Sandbox Code Playgroud)

c++ syntax constructor

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

Delphi 如何管理为作为参数创建的对象分配的内存?

标题可能看起来有点令人困惑,但我的问题的核心是:在以下两种情况下分配的内存会发生什么情况?

场景一:

var
 FHTTPResponse: IHTTPResponse;

...

FHTTPResponse := HTTPClient.Post(RequestURL, TStringStream.Create(APostParams.ToString, TEncoding.UTF8));
Run Code Online (Sandbox Code Playgroud)

TStringStream对象是在函数的参数列表中创建的(在本例中为THTTPClient.Post)。当我创建它时,分配给它的内存会发生什么,但(据我所知)我无法释放它。

场景2:

  ExampleClass = class
    private
      FName, FValue: string;
    public
      constructor Create(AName, AValue: string);

      function AsStringList: TStringList;
  end;

implementation

function ExampleClass.AsStringList: TStringList;
begin
  Result := TStringList.Create;
  Result.Add(FValue);
  Result.Add(FName);
end;

constructor ExampleClass.Create(AName, AValue: string);
begin
  FValue := AValue;
  FName := AName;
end;
Run Code Online (Sandbox Code Playgroud)

当用户调用时ExampleClass.AsStringList,我的理解是我不会返回对对象的引用,就像我有一个字段一样FAsStringList,而是返回对象本身

在这种情况下,我将传递释放对象的责任TStringList(这感觉是错误的)。在这个回报之下还有其他事情发生吗?是否有更好的方法将数据作为不同的结构返回,这并不意味着让用户有责任释放对象,而他们甚至不知道自己必须这样做?

TL;DR是否有更好(或正确)的方法来将数据表示形式返回为不同的对象类型,而不将内存管理职责转移给用户?

delphi memory-management

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

使用额外的通用参数自定义 printf

我想创建一个自定义的打印函数,用法与 printf 相同,但为 pid 和 tid 添加 2 个参数。

#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/syscall.h>

int gettid() {
    return syscall(__NR_gettid);
}

void print( const char *fmt,...) {
    va_list vlist;
    va_start(vlist, fmt);

    va_end(vlist);
    return;
}

int main() { 
    printf("%d %d hello\n",getpid(), gettid());
    //print("hello\n");
    return 0; 

Run Code Online (Sandbox Code Playgroud)

实现打印功能的正确方法是什么?

c

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

如何从 C 函数中返回数组指针?

数组指针(不是数组指针)是 C 编程语言的一个鲜为人知的功能。

int arr[] = { 3, 5, 6, 7, 9 };
int (*arr_ptr)[5] = &arr;

printf("[2]=%d", (*arr_ptr)[2]);
Run Code Online (Sandbox Code Playgroud)

它们允许您“恢复”动态分配的数组指针。
(我认为这很酷)

int *ptr = malloc(sizeof(int) * 5);
int(*arr_ptr)[5] = (int(*)[5])ptr;

printf("[2]=%d", (*arr_ptr)[2]);
Run Code Online (Sandbox Code Playgroud)

我试图定义一个函数来返回数组指针,但没有成功。
我尝试过这样的事情:

int (*)[5] create_arr_5(void) 
{
    int(*arr_ptr)[5] = malloc(sizeof(int) * 5);
    return arr_ptr;
}
Run Code Online (Sandbox Code Playgroud)

c arrays

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

ARM 上的不同 C++ 输出

我正在学习C++。我有一台 MacBook Pro M1PRO 芯片和一台配备 Fedora 39 的第 8 代 i5 的华硕。

我了解一点 Java,所以在我的 Hello World 项目中,我尝试重新创建分割和修剪函数,但在 C+ 中,我发现一些非常令人费解的东西。

我在两台机器上使用以下命令进行编译: g++ -std=c++20 -o hello main.cpp

代码:

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;


string vector_to_string(const vector<string>& v, const string& separator = "") {
    string result = "[";
    for (size_t i = 0; i < v.size(); ++i) {
        result += v[i];
        if (i < v.size() - 1) {
            result += separator;
        }
    }
    result += "]"; …
Run Code Online (Sandbox Code Playgroud)

c++

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

Rust 中的异步操作什么时候可以退出?

语境

我正在阅读这个博客。提供了一些代码:

async fn parse_line(socket: &TcpStream) -> Result<String, Error> {
    let len = socket.read_u32().await?;
    let mut line = vec![0; len];
    socket.read_exact(&mut line).await?;
    let line = str::from_utf8(line)?;
    Ok(line)
}

loop {
    select! {
        line_in = parse_line(&socket) => {
            if let Some(line_in) = line_in {
                broadcast_line(line_in);
            } else {
                // connection closed, exit loop
                break;
            }
        }
        line_out = channel.recv() => {
            write_line(&socket, line_out).await;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

作者声称,如果在执行 parse_line 时收到消息,parse_line则最终可能会处于损坏状态。channel

问题

什么时候可以parse_line中断?是在任何时候吗?根据我目前的理解(这可能是错误的),Rust 可以在等待语句中切换线程上的任务,但在这些点上状态会被存储,以便可以恢复工作。 …

rust rust-tokio

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

AGP 8.3.0 的清单合并失败

我正在尝试将我的项目升级到 AGP 8.3.0,但收到错误:

Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/ga_ad_services_config) from [com.google.android.gms:play-services-measurement-api:21.5.1] AndroidManifest.xml:32:13-58
    is also present at [com.google.android.gms:play-services-ads-lite:22.6.0] AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
    Suggestion: add 'tools:replace="android:resource"' to <property> element at AndroidManifest.xml to override.
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

AD_SERVICES_CONFIG我的清单文件中没有任何相关内容。

android gradle

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

Lambda constexpr 在 msvc 中有效,但在 gcc 中无效

我编写了以下程序,该程序使用 msvc 编译,但不使用 gcc 和 clang 编译。 演示

int main() {
    constexpr auto func = []()constexpr { return 1; };
    auto i = []{return func();};
}   
Run Code Online (Sandbox Code Playgroud)

我想知道这里的编译器是哪个?

海湾合作委员会 说:

<source>: In lambda function:
<source>:3:28: error: 'func' is not captured
    3 |     auto i = []{return func();};
      |                        ~~~~^~
<source>:3:15: note: the lambda has no capture-default
    3 |     auto i = []{return func();};
      |               ^
<source>:2:20: note: 'constexpr const main()::<lambda()> func' declared here
    2 |     constexpr auto func = []()constexpr { …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++20

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

如何忽略“使用可能未分配的字段‘字段’”?

我有以下最小示例代码:

struct MyStruct 
{
    long Size;
}

MyStruct myStruct;
bool result;

if (someCondition)
{
    result = API.SomeThirdPartyCall(out myStruct); // the call will set 'result' to 'true' and assign a value to 'myStruct'
}
if (result)
{
    result = API.AnotherCall(myStruct); //  <-- gives error "Use of possibly unassigned field 'myStruct' (CS0170)"
}
Run Code Online (Sandbox Code Playgroud)

我知道myStruct当我尝试使用该结构进行第二次 API 调用时,它已被分配了一个值。该API是由第三方提供的,我无法更改它。有什么方法可以忽略我的字段可能未定义的错误吗?

我知道有一些类似的问题,例如How to check if a struct has been instanciated,但解决方案是使用可为空的结构,这对我来说不是一个选择,因为 API 不会接受可为空的结构。

c# struct

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