@Muriam

Что такое макросы в С++?

Почему результат этого выражения = 3, а не 9 ?
5c964473939f7183345090.png
  • Вопрос задан
  • 256 просмотров
Решения вопроса 2
myjcom
@myjcom Куратор тега C++
потому что x это 3 + 0; (целиком) это тупо текст, который будет вставлен вместо x;
x * x == 3 + 0 * 3 + 0;

получаем

3 + (0 * 3) + 0;
3 + 0 + 0;
3;

макросы в С++

Атавизм
иногда полезный
https://en.cppreference.com/w/cpp/preprocessor/replace

а так тут есть как минимум
https://en.cppreference.com/w/cpp/language/constexpr
https://en.cppreference.com/w/cpp/language/templates

code
#include <iostream>

template<typename T>
auto sqr = [](T x)
{
  return x * x;
};

int main()
{
  std::cout << sqr<int>(3 + 0);
}


что будет развернуто в что-то типа
//...
class __lambda_3_12
{
  public: inline int operator()(int x) const
  {
    return x * x;
  }
//...
};
//...

Ответ написан
Комментировать
32bit_me
@32bit_me
Программист, встраиваемые системы
#define sqr(x) x*x - это образец того, как не нужно писать макросы.

Более правильно так:

#define SQR(x) ((x)*(x))

Тогда:
((3+0)*(3+0)) = 9

Но в С++ использование макросов считается дурным тоном (чаще всего). Используйте inline - функции.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы