AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-508343

xmllmx's questions

Martin Hope
xmllmx
Asked: 2025-02-08 16:09:28 +0800 CST

[[provável]] é redundante se [[improvável]] existe na ramificação if-else em C++20?

  • 10

Considere o seguinte código:

void f1(bool ok) {
    if (ok) [[likely]] {
        // ...
    } else [[unlikely]] {
        // ...
    }
}

void f2(bool ok) {
    if (ok) [[likely]] {
        // ...
    } else {
        // ...
    }
}

void f3(bool ok) {
    if (ok)  {
        // ...
    } else [[unlikely]] {
        // ...
    }
}

f1, f2, e são f3equivalentes do ponto de vista do compilador?

c++
  • 1 respostas
  • 113 Views
Martin Hope
xmllmx
Asked: 2025-01-19 02:26:14 +0800 CST

std::expected em libc++ retorna "símbolo indefinido: _ZTINSt3__119bad_expected_accessIvEE" em tempo de execução

  • 4
#include <expected>
#include <span>
#include <iostream>

int main() {
    auto e = std::expected<std::span<char>, int>{};
    std::cout << e.value().size() << std::endl;
}

Meu compilador é clang-19.1.5. Compile o código com o seguinte comando:

clang++-19 -std=c++2c -stdlib=libc++ ./toy.cpp -lc++abi -lunwind -lc++

A compilação e a vinculação estão corretas, mas um erro de tempo de execução é gerado:

./a.out: erro de pesquisa de símbolo: ./a.out: símbolo indefinido: _ZTINSt3__119bad_expected_accessIvEE

$ nm -D /usr/local/lib/libc++.so.1 | grep access
00000000000607b0 T _ZNKSt18bad_variant_access4whatEv
0000000000054040 T _ZNKSt19bad_optional_access4whatEv
0000000000054060 T _ZNSt12experimental19bad_optional_accessD0Ev
0000000000054050 T _ZNSt12experimental19bad_optional_accessD1Ev
0000000000054050 T _ZNSt12experimental19bad_optional_accessD2Ev
0000000000054020 T _ZNSt19bad_optional_accessD0Ev
0000000000054010 T _ZNSt19bad_optional_accessD1Ev
0000000000054010 T _ZNSt19bad_optional_accessD2Ev
00000000000ee248 D _ZTINSt12experimental19bad_optional_accessE
00000000000ee440 D _ZTISt18bad_variant_access
00000000000ee208 D _ZTISt19bad_optional_access
00000000000b024b R _ZTSNSt12experimental19bad_optional_accessE
00000000000ccded R _ZTSSt18bad_variant_access
00000000000b0233 R _ZTSSt19bad_optional_access
00000000000ee220 D _ZTVNSt12experimental19bad_optional_accessE
00000000000ee418 D _ZTVSt18bad_variant_access
00000000000ee1e0 D _ZTVSt19bad_optional_access

Se eu mudar -stdlib=libc++para -stdlib=libstdc++, então ok.

Por que std::expected o libc++ não funciona?

c++
  • 1 respostas
  • 48 Views
Martin Hope
xmllmx
Asked: 2025-01-01 23:15:31 +0800 CST

Por que o padrão C++ não define implicitamente um lambda que não captura nada como `estático` por padrão?

  • 13

C++23 permite definir um lambda como static. ou seja, se um lambda não captura nada, então ele pode ser definido como static:

// with superfluous argument `this`, less efficient.
auto fn1 = [](int a, int b) { return a + b; }; 

// no argument `this`, more efficient!
auto fn2 = [](int a, int b) static { return a + b; }; 

Eu só me pergunto:

Por que o padrão C++ não define implicitamente um lambda que não captura nada como staticpadrão?

c++
  • 1 respostas
  • 294 Views
Martin Hope
xmllmx
Asked: 2024-12-27 23:49:18 +0800 CST

Permitir que a função seja chamada com argumentos em qualquer ordem

  • 9

Considere o seguinte código:

#include <concepts>

struct T1 {};

struct T2 {};

struct T3 {};

struct T4 {};

void bar(T1, T2, T3, T4) {
}

template<typename T>
concept IsT = std::same_as<T, T1> || std::same_as<T, T2> ||
              std::same_as<T, T3> || std::same_as<T, T4>;

void foo(IsT auto x1, IsT auto x2, IsT auto x3, IsT auto x4) {
    // How to order the types of x1, x2, x3, x4 and call bar(x?, x?, x?, x?)?
}

int main() {
    foo(T1{},T2{},T3{},T4{}); // ok
    foo(T4{},T3{},T2{},T1{}); // ok
    foo(T3{},T2{},T1{},T4{}); // ok
    // ...
}

Minha intenção é simples:

O usuário pode chamar fooem qualquer ordem de argumentos, mas finally barserá chamado com os argumentos na ordem correta.

A solução trivial é usar força bruta para dividir os 24 casos, o que é obviamente tedioso e propenso a erros.

Existe uma maneira sem força bruta de resolver esse problema? Estou usando C++20.

c++
  • 1 respostas
  • 107 Views
Martin Hope
xmllmx
Asked: 2024-12-20 19:22:09 +0800 CST

Como usar o inicializador de membro padrão se o construtor `std::initializer_list` existir em C++11?

  • 5

Considere o seguinte código:

#include <iostream>

struct A {
    A(int, int) {
        std::cout << "A::A(int, int)\n";
    }

    A(std::initializer_list<int>) {
        std::cout << "A::A(std::initializer_list<int>)\n";
    }
};

struct B {
    A a(1, 2); // compiler error
};

struct C {
    A a{1, 2}; // always call A::A(std::initializer_list<int>)
};

struct D {
    A a{A(1, 2)}; // always call A::A(int, int), how UgLy it is!
};

int main() {
    new B{};
    new C{};
    new D{};
}

Existe uma solução melhor do que A a{A(1, 2)};?

c++
  • 1 respostas
  • 66 Views
Martin Hope
xmllmx
Asked: 2024-12-19 17:07:11 +0800 CST

`std::function` foi descontinuado por `std::copyable_function` em C++26?

  • 13

C++26 fornece std::copyable_function [cppref link] . No entanto, o existente std::functionjá é copyable. Então, tenho 3 perguntas:

  1. Quais são as principais vantagens de std::copyable_functionmais de std::function?

  2. Invocar um vazio std::copyable_functioné indefinido, enquanto invocar um vazio std::functionlançará uma exceção. Qual é a lógica por trás disso?

  3. Foi std::functiondescontinuado std::copyable_functionem C++26?

c++
  • 1 respostas
  • 498 Views
Martin Hope
xmllmx
Asked: 2024-12-19 11:33:25 +0800 CST

Por que usar `(void)++p` em vez de apenas `++p` nesta proposta do padrão C++?

  • 9

Em uma proposta padrão C++ , encontro um trecho de código estranho como o seguinte:

template <input_iterator I, sentinel_for<I> S, nothrow_forward_iterator I2>
constexpr auto uninitialized_copy(I first, S last, I2 d_first) -> I2 {
    using T = iter_value_t<I2>;
    I2 current = d_first;
    try {
        for (; first != last; ++first, (void)++current) {
            ::new (std::addressof(*current)) T(*first);
        }
    } catch (...) {
        std::destroy(d_first, current);
        throw;
    }
}

Por que usar (void)++current em vez de apenas ++current aqui?

c++
  • 1 respostas
  • 26 Views
Martin Hope
xmllmx
Asked: 2024-02-20 20:16:28 +0800 CST

Por que o clang mais recente não define a macro de teste de recursos __cpp_coroutines?

  • 5
#include <iostream>

int main() {
#if __has_include(<coroutine>)
    std::cout << "__has_include(<coroutine>)" << std::endl;
#endif

#if defined(__cpp_impl_coroutine)
    std::cout << "__cpp_impl_coroutine is defined." << std::endl;
#endif

#if defined(__cpp_coroutines)
    std::cout << "__cpp_coroutines is defined." << std::endl;
#else
    std::cout << "__cpp_coroutines IS NOT defined!" << std::endl;
#endif
}

Meu compilador é clang-18.1.0.

Construa o código com clang++ -std=c++20 -stdlib=libc++ ./main.cppe a saída será:

__has_include(<coroutine>)
__cpp_impl_coroutine is defined.
__cpp_coroutines IS NOT defined!

Por que o clang mais recente não define a macro de teste de recursos __cpp_coroutines?

c++
  • 1 respostas
  • 78 Views
Martin Hope
xmllmx
Asked: 2024-02-14 12:21:53 +0800 CST

Por que std::memory_order_acq_rel sempre aciona avisos em C++ 11?

  • 5

Meu compilador é clang 18.1.0-rc1; e o código a seguir aciona dois avisos:

#include <atomic>

std::atomic<int> n;

int main() {
    // Warning: Memory order argument to atomic operation is invalid
    n.load(std::memory_order_acq_rel); 

    // Warning: Memory order argument to atomic operation is invalid
    n.store(1, std::memory_order_acq_rel);
}

Qual é o uso legal de std::memory_order_acq_rel?


Atualizar

n.fetch_add(1, std::memory_order_acq_rel); // now is ok
c++
  • 2 respostas
  • 47 Views
Martin Hope
xmllmx
Asked: 2024-02-05 00:10:16 +0800 CST

Por que std::source_location não fornece comprimentos para evitar penalidades de desempenho em C++20?

  • 2

Considere o seguinte código:

void Log(std::string_view       msg,
    std::source_location const& loc = std::source_location::current()) {
    
    // Performance penalty!
    auto const n = std::strlen(loc.file_name()); 
    auto s = ""s;
    s.resize(msg.size() + n);

    std::memcpy(&s[0], msg.data(), msg.size());
    std::memcpy(&s[msg.size()], loc.file_name(), n);
    s[msg.size() + n] = 0; // ensure to be null-terminated

    // sendToRemoteMachine(s); 
}

Obviamente, se std::source_location::file_nameretornar a std::string_view, a penalidade de desempenho pode ser facilmente evitada.

Eu acho que std::source_location::file_nameé uma informação gerada em tempo de compilação e somente leitura. O compilador pode armazená-lo em um std::string_viewobjeto.

Por que não std::source_locationfornece comprimentos para evitar penalidades de desempenho em C++20?

Atualizar

Outro artigo relacionado: std::source_locationestá quebrado

c++
  • 1 respostas
  • 85 Views
Martin Hope
xmllmx
Asked: 2024-02-04 00:57:57 +0800 CST

Por que um alias de tipo não pode ser um nome de classe amigo em C++?

  • 6
class A {    
};

class B {
    using C = A;

    // Compilation error: 
    // Type alias 'C' cannot be referenced with a class specifier 
    friend class C;    
};

Por que um alias de tipo não pode ser um nome de classe amigo em C++?

Qual é a lógica por trás?

c++
  • 1 respostas
  • 44 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve