LINUX.ORG.RU

Сообщения sostupid

 

error: invalid array assignment

int main() {
  int a[10], b[10];
  a = b;
}

https://ideone.com/BdUzkI

prog.cpp: In function ‘int main()’:
prog.cpp:3:7: error: invalid array assignment
   a = b;
       ^

Почему компилятор выдаёт эту ошибку? Стандарт говорит:

http://eel.is/c++draft/expr.ass#1

The assignment operator (=) and the compound assignment operators all group right-to-left. All require a modifiable lvalue as their left operand;

Может, тут не modifiable lvalue? Да вроде нет:

http://eel.is/c++draft/basic.lval#def:modifiable

An lvalue is modifiable unless its type is const-qualified or is a function type.

Так в чём проблема? Почему компилятор выдаёт ошибку, а не делает то, что велит стандарт:

http://eel.is/c++draft/expr.ass#2

In simple assignment (=), the value of the expression replaces that of the object referred to by the left operand.

 ,

sostupid
()

C++ арифметика указателей: является ли код эквивалентным?

Первый второму?

#include <iostream>
#include <cstddef>
#include <new>

int main()
{
    alignas(float) std::byte stor[3*sizeof(float)];
    
    for (int i = 0; i < 3; ++i)
        new (stor + i*sizeof(float)) float(i);
    
    for (int i = 0; i < 3; ++i)
        std::cout << *std::launder( reinterpret_cast<float*>(stor + i*sizeof(float)) ) << std::endl;
}
#include <iostream>
#include <cstddef>

int main()
{
    alignas(float) std::byte stor[3*sizeof(float)];
    
    for (int i = 0; i < 3; ++i)
        new (stor + i*sizeof(float)) float(i);
    
    for (int i = 0; i < 3; ++i)
        std::cout << ((float*)stor)[i] << std::endl;
}

 , ,

sostupid
()

Функции как first-class objects

Про языки, в которых функции можно передавать/возвращать из других функций как значения, традиционно говорят, что в них функции — это объекты первого порядка.

Но int или float я могу сериализовать в файл или в сеть и десериализовать обратно.
Но не в каждом языке с функциями первого порядка я могу проделать то же самое с функциями.

Вам не кажется, что первый порядок какой-то … не совсем первый?

 

sostupid
()

Является ли API языком?

Помнится, В. Луговский от***сосил (отругал) кого-то за то, что этот кто-то назвал API «языком». Сейчас уже не могу найти ссылок, сорян.

Но вот я смотрю в презентацию К. Эллиота (создатель FRP, если я не ошибаюсь), и там написано: «An API is a language for communicating about a domain»

Так кто из них прав: великий Луговский или великий Эллиот?

P.S. почему-то тег «is a» написан слитно, админы, поправьте, пожалуйста.

 , ,

sostupid
()

clang::ParmVarDecl, полный SourceRange

Всем привет.

Как превратить clang::ParmVarDecl обратно в строку из исходного кода? Причём с типом, именем (если есть) и значением по-умолчанию (если есть)?

Если взять SourceRange из clang::ParmVarDecl::getSourceRange и скормить его clang::Lexer::getSourceText, то обратно я получаю:

  • Для параметра функции без значения по-умолчанию только тип параметра. Т.е. если параметром был `int i`, getSourceText возвращает `int`.
  • Для параметра со значением по-умолчанию тип, имя, знак равенства. Значения по-умолчанию не получаю. Т.е. для параметра `int i = 0`, getSourceText возвращает `int i = `.

 

sostupid
()

RSS подписка на новые темы