Perguntas com a marcação «language-lawyer»

Para perguntas sobre os meandros das especificações formais ou oficiais das linguagens e ambientes de programação.

3
Tudo bem retornar o valor do argumento padrão por referência const?
Tudo bem retornar o valor do argumento padrão por referência const, como nos exemplos abaixo: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const std::string& s1 = foo(); std::string s2 = foo(); const std::string& s3 = foo("s"); std::string s4 = foo("s"); …




3
Conceitos do C ++ 20: Qual especialização de modelo é escolhida quando o argumento do modelo se qualifica para vários conceitos?
Dado: #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> w; …






4
Conversão implícita não permitida no retorno
#include <optional> bool f() { std::optional<int> opt; return opt; } Não compila: 'return': cannot convert from 'std::optional<int>' to 'bool' Referência de consultoria Eu teria pensado em encontrar uma explicação, mas li como deveria estar ok. Conversões implícitas são executadas sempre que uma expressão de algum tipo T1 é usada no …

1
Por que {} como argumento de função não leva à ambiguidade?
Considere este código: #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; int …

4
É válido usar std :: transform com std :: back_inserter?
Cppreference possui este código de exemplo para std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Mas também diz: std::transformnão garante a aplicação em ordem de unary_opou binary_op. Para aplicar uma função a uma sequência em ordem ou para aplicar uma função que modifica …


2
A precedência / prioridade do operador de seta (->) é mais baixa ou a prioridade de atribuição / atribuição combinada é mais baixa?
JLS : O operador de precedência mais baixa é a seta de uma expressão lambda (->) , seguida pelos operadores de atribuição. Seguido em que direção (prioridade crescente, prioridade decrescente)? - "seguido" significa que a atribuição tem prioridade mais alta ou mais baixa (em relação ao operador de seta)? Eu …

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.