Size: a a a

2020 August 28

ВС

Вадим Смирнов... in pro.cxx
Здравствуйте.
Почему в цикле не происходит присваивания и не печатаются значения? В то время как присваивание с явным указанием индексов.
   pixel_coords[0][0][0] = 0.0;
   pixel_coords[1][1][1] = 0.0;
   pixel_coords[2][2][0] = 0.0;
    //эти значения выводятся.

   for (i2 =0; i2 < y1;i2++)
       printf("\n");
       for (j2=0;j2 < x1; j2++)
           pixel_coords[i2][j2][0] = 0.0;
           printf("%.6f\n",pixel_coords[i2][j2][0]); //ничего не выводит.
источник

D

Danya in pro.cxx
Вадим Смирнов
Здравствуйте.
Почему в цикле не происходит присваивания и не печатаются значения? В то время как присваивание с явным указанием индексов.
   pixel_coords[0][0][0] = 0.0;
   pixel_coords[1][1][1] = 0.0;
   pixel_coords[2][2][0] = 0.0;
    //эти значения выводятся.

   for (i2 =0; i2 < y1;i2++)
       printf("\n");
       for (j2=0;j2 < x1; j2++)
           pixel_coords[i2][j2][0] = 0.0;
           printf("%.6f\n",pixel_coords[i2][j2][0]); //ничего не выводит.
источник

ВС

Вадим Смирнов... in pro.cxx
спасибо
источник

D

Danya in pro.cxx
Вадим Смирнов
Здравствуйте.
Почему в цикле не происходит присваивания и не печатаются значения? В то время как присваивание с явным указанием индексов.
   pixel_coords[0][0][0] = 0.0;
   pixel_coords[1][1][1] = 0.0;
   pixel_coords[2][2][0] = 0.0;
    //эти значения выводятся.

   for (i2 =0; i2 < y1;i2++)
       printf("\n");
       for (j2=0;j2 < x1; j2++)
           pixel_coords[i2][j2][0] = 0.0;
           printf("%.6f\n",pixel_coords[i2][j2][0]); //ничего не выводит.
И код надо полностью присылать, а непонятные кусочки, тут экстрасенсов нет
источник

Rn

Roman na in pro.cxx
Вадим Смирнов
Здравствуйте.
Почему в цикле не происходит присваивания и не печатаются значения? В то время как присваивание с явным указанием индексов.
   pixel_coords[0][0][0] = 0.0;
   pixel_coords[1][1][1] = 0.0;
   pixel_coords[2][2][0] = 0.0;
    //эти значения выводятся.

   for (i2 =0; i2 < y1;i2++)
       printf("\n");
       for (j2=0;j2 < x1; j2++)
           pixel_coords[i2][j2][0] = 0.0;
           printf("%.6f\n",pixel_coords[i2][j2][0]); //ничего не выводит.
куда пропали скобки?
источник

ВС

Вадим Смирнов... in pro.cxx
в бездну глупости. спасибо
источник

ПК

Паша Калугин... in pro.cxx
ох уж эти питонисты
источник

ВС

Вадим Смирнов... in pro.cxx
да, 1й день пишу на си, инерция создаёт слепые пятна.
источник

K

Kirill in pro.cxx
Подскажите, пожалуйста, почему вызывается один конструктор? Мы ведь создаём объект в getFoo, потом копируем его в Foo foo. Что-то я не понимаю
#include <iostream>

class Foo {
public:
 Foo() {
   std::cout << "Foo()" << std::endl;
 }

 Foo(const Foo&) {
   std::cout << "Foo(const Foo&)" << std::endl;
 }

 Foo(Foo&&) {
   std::cout << "Foo(Foo&&)" << std::endl;
 }

 ~Foo() {
   std::cout << "~Foo" << std::endl;
 }
};

class Bar {
public:
 Bar() {}
 ~Bar() {}
 Foo getFoo() {
   return Foo();
 }
};

int main() {
 Bar bar;
 Foo foo = bar.getFoo();
 return 0;
}
источник

АК

Александр Караев... in pro.cxx
Kirill
Подскажите, пожалуйста, почему вызывается один конструктор? Мы ведь создаём объект в getFoo, потом копируем его в Foo foo. Что-то я не понимаю
#include <iostream>

class Foo {
public:
 Foo() {
   std::cout << "Foo()" << std::endl;
 }

 Foo(const Foo&) {
   std::cout << "Foo(const Foo&)" << std::endl;
 }

 Foo(Foo&&) {
   std::cout << "Foo(Foo&&)" << std::endl;
 }

 ~Foo() {
   std::cout << "~Foo" << std::endl;
 }
};

class Bar {
public:
 Bar() {}
 ~Bar() {}
 Foo getFoo() {
   return Foo();
 }
};

int main() {
 Bar bar;
 Foo foo = bar.getFoo();
 return 0;
}
copy elision
источник

K

Kirill in pro.cxx
Спасибо
источник

ПК

Побитый Кирпич... in pro.cxx
Kirill
Подскажите, пожалуйста, почему вызывается один конструктор? Мы ведь создаём объект в getFoo, потом копируем его в Foo foo. Что-то я не понимаю
#include <iostream>

class Foo {
public:
 Foo() {
   std::cout << "Foo()" << std::endl;
 }

 Foo(const Foo&) {
   std::cout << "Foo(const Foo&)" << std::endl;
 }

 Foo(Foo&&) {
   std::cout << "Foo(Foo&&)" << std::endl;
 }

 ~Foo() {
   std::cout << "~Foo" << std::endl;
 }
};

class Bar {
public:
 Bar() {}
 ~Bar() {}
 Foo getFoo() {
   return Foo();
 }
};

int main() {
 Bar bar;
 Foo foo = bar.getFoo();
 return 0;
}
кол-во copy/move конструкторов это вообще плавающая величина, которая зависит от стандарта и ключей оптимизации
источник

K

Kirill in pro.cxx
Побитый Кирпич
кол-во copy/move конструкторов это вообще плавающая величина, которая зависит от стандарта и ключей оптимизации
А как быть уверенным в том что компилятор это оптимизирует?
Например, я делаю класс ContextLock, который в конструкторе захватывает контекст, а в деструкторе освобождает
И в классе ContextManager я делаю метод ContextLock createLock(), который как бы должен вернуть этот лок туда, где я его вызвал

Не хотелось бы, чтобы контекст захватывался и освобождался дважды
источник

АК

Александр Караев... in pro.cxx
Kirill
А как быть уверенным в том что компилятор это оптимизирует?
Например, я делаю класс ContextLock, который в конструкторе захватывает контекст, а в деструкторе освобождает
И в классе ContextManager я делаю метод ContextLock createLock(), который как бы должен вернуть этот лок туда, где я его вызвал

Не хотелось бы, чтобы контекст захватывался и освобождался дважды
например, взять C++17 и выше, запретить копии и мувы и радоваться
источник

ПК

Побитый Кирпич... in pro.cxx
Александр Караев
например, взять C++17 и выше, запретить копии и мувы и радоваться
Пока недостаточно, ждём NRVO гарантированное
источник

K

Kirill in pro.cxx
Александр Караев
например, взять C++17 и выше, запретить копии и мувы и радоваться
У меня и так C++17. Лишние конструкторы удалю
источник

АК

Александр Караев... in pro.cxx
Побитый Кирпич
Пока недостаточно, ждём NRVO гарантированное
достаточно, если объект правильно возвращать (RVO-то гарантированно)
источник

АК

Александр Караев... in pro.cxx
и в самом плохом случае не скомпилируется (если NRVO применили и не прокатило), что тоже хорошо
источник

ПК

Побитый Кирпич... in pro.cxx
Александр Караев
достаточно, если объект правильно возвращать (RVO-то гарантированно)
Ну вот тебе надо после конструирования чёнить с ним сделать и вернуть
источник

ПК

Побитый Кирпич... in pro.cxx
Kirill
У меня и так C++17. Лишние конструкторы удалю
Посмотри как https://en.cppreference.com/w/cpp/thread/unique_lock сделан
источник