[C++] boost::thread хрень какая-то
Если заменить кусок "F sf; thread t(sf);" на просто "thread(F;", то программа выдает только это:От тебя я этого не ожидал. Только что в соседнем треде объяснял, что F - это прототип функции. В твоём случае вообще вся строка становится прототипом функции.
thread(F;скорее всего наследие C;
он думает, что этой строчкой - ты задекларировал функцию.
От тебя я этого не ожидал.А ты будь всегда начеку %)
Спасибо, давно с этой хренью не встречался, забыл уж
Все из-за того, что все больше по работе не программированием приходится заниматься, а всякой хуетой
он думает, что этой строчкой - ты задекларировал функцию.А почему он не думает, что вложенные функции в C++ запрещены?
Потому что это декларация, а не имплементация функции.
Потому что это декларация, а не имплементация функции.Ты хочешь сказать, что "в C++ запрещены вложенные функции" означает только "в C++ запрещено имплементировать вложенные функции, но можно писать бесполезные объявления"?
А почему он не думает, что вложенные функции в C++ запрещены?Он так думает. Просто в Си++ разрешены функции, которые принимают указатели на функции в качестве аргумента.
Ты хочешь сказать, что "в C++ запрещены вложенные функции" означает только "в C++ запрещено имплементировать вложенные функции, но можно писать бесполезные объявления"?правильнее, в C можно писать бесполезные объявления функций внутри функций
а C++ бесполезно полностью совместим с C
lib.cpp
#include <iostream>
int g
{
std::cout << "g" << std::endl;
}
main.cpp
int main
{
int g;
g;
return 0;
}
g++ main.cpp lib.cpp
./a.out:
g
Работает! Я в шоке.
int main
{
int g;
g;
return 0;
}
и
int g;
int main
{
g;
return 0;
}
?
Например,
int main
{
int g;
g;
return 0;
}
int k
{
//g; //ошибка
return 0;
}
int g
{
return 0;
}
Интересно, а чем, по-твоему, отличаютсяТем, что это непонятно совсем. Например: почему я могу объявить внешнюю функцию внутри другой функции? Почему тогда я не могу там ее определить, сделав полностью локальной? Почему я не могу внутри main.cpp объявить функцию не из глобального пространства имен? Зачем вообще этот аппендикс нужен, кроме как для внесения путаницы?
Не используй.
Язык вовсе не обязан иметь средства защиты от плохого программирования.
Язык вовсе не обязан иметь средства защиты от плохого программирования.Эти побочные эффекты приводят к ситуациям, когда я смотрю на код и вижу его смысл в одном, а компилятор - совсем в другом, вот что мне не нравится. Из-за этого, как видишь, происходят нелепые ошибки.
я смотрю на код и вижу его смысл в одном, а компилятор - совсем в другомТо есть, ты допускаешь, что к объявлению переменных ставились "" без существенной причины?
объявлению переменных ставились "" без существенной причины?Почему же без существенной...
MyClass a(10); // constructor
MyClass a; // function declaration
Неаккуратненько!
это проблемы с++ а не с
напиши разработчикам gcc, cl, а также других компиляторов просьбу добавить нотайс предупреждающий о том, что этим пользоваться не следует
Оставить комментарий
erotic
g++ boost_thread.cpp -lboost_thread -g -O0
./a.out:
Если заменить кусок "F sf; thread t(sf);" на просто "thread(F;", то программа выдает только это:
Не пойму никак, где конструкторы, где деструкторы, почему не вызывается f...
boost 1.35.0, gcc 4.1.2, amd64.