LINUX.ORG.RU

Шутка

 


0

1

http://blogs.msdn.com/b/oldnewthing/archive/2015/05/25/10616865.aspx

Вот такую шутку опубликовали на msdn. Суть в том, что это работает без каких-либо там расширений VC++, а за счет ~ - битового не, и унарного минуса.

А теперь у меня вопрос: всегда ли эта штука будет выдавать то, что нужно? Результат битового отрицания в этой ситуации как-нибудь зависит от того, little endian у нас или big endian, или от чего-нибудь еще? А что если число уже равно std::numeric_limits<соответствующий_типа>::min() или std::numeric_limits<соответствующий_типа>::max()? Там какое-нибудь переполнение или еще что-то будет?

Там написано, что «Visual Studio 2015 RC contains a pair of experimental operators, nicknamed tadpole operators.»
Впрочем любой компилятор трактует ~- и -~ как четыре оператора в соответствии с их приоритетом.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Почему там сказано «experimental operators» и «__ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS» я не понимаю. Видимо в майкрософте завелся свой петросян.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от andreyu

Писатели студийных компиляторов вообще люди странные, да. До сих пор C99 осилить не могут, зато натолкали своих расширений ни с чем не совместимых.

anonymous
()
Ответ на: комментарий от andreyu

Почему там сказано «experimental operators» и «__ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS» я не понимаю. Видимо в майкрософте завелся свой петросян.

может эти петросянцы разрешат перезагрузку как для отдельного унарного префиксного оператора operator<~->

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

До сих пор C99 осилить не могут, зато натолкали своих расширений ни с чем не совместимых.

Что там осиливать-то? Им не нужен С99.

staseg ★★★★★
()
Ответ на: комментарий от MKuznetsov

может эти петросянцы разрешат перезагрузку

Вы хотели сказать перегрузку? :)

как для отдельного унарного префиксного оператора operator<~->

Скорее всего этот дефайн вообще ничего не значит. Можно ли перегрузить этот оператор я не знаю, поскольку рядом со мной нет винды с vs 2015.

andreyu ★★★★★
()
Ответ на: комментарий от staseg

Что там осиливать-то? Им не нужен С99.

Судя по всему им и c++11 не нужен. Его они тоже до сих пор не осилили.

p.s. Я еще не видел vs 2015.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Судя по всему им и c++11 не нужен. Его они тоже до сих пор не осилили.

Я пока еще работаю в 2013, там уже очень много поддерживаемых фич. В 2015 расширили поддержку С++11 и начали добавлять С++14. Насколько я помню на момент 2013 года студийный компилятор не казался ущербным на фоне gcc или clang.

staseg ★★★★★
()

Вот клоуны. У них в этом RC не доделана поддержка даже C++11, не говоря уже о C++14, зато ненужными операторами они балуются вовсю.

How often have you had to write code like this:

x = (y + 1) % 10; x = (y + 1) * (z - 1); x = (double)(f(y) + 1);

Once or twice in my entire life.

asaw ★★★★★
()
Ответ на: комментарий от anonymous

в 15 уже много из с++14 есть

«Многое есть» и «есть поддержка стандарта» - это несколько разные вещи. И не стоит забывать о фактической реализации этого стандарта.

andreyu ★★★★★
()
Ответ на: комментарий от staseg

Насколько я помню на момент 2013 года студийный компилятор не казался ущербным на фоне gcc или clang.

Я читал о списке улучшений и повышения строгости в vs 2015 на хабре, но сам его не щупал.

andreyu ★★★★★
()
Ответ на: комментарий от asaw

Once or twice in my entire life.

Вообще выражение «x = (x + 1) % N;» достаточно часто встречается. Иногда его записывают так «x++; x %= N;».

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

ROFL. хорошо пошутил. У них там уже давно должно было быть 100%, но пока нету даже того, что использует boost. Половину из заявленных фич они реализовали уже после выхода RC. Представляю с каким качеством.

asaw ★★★★★
()

всегда ли эта штука будет выдавать то, что нужно?

Если отрицательные числа кодируются в дополнительном коде, то да. Насколько понимаю, порядок байт (BE или LE) ортогонален к этому вопросу, т.е. без разницы.

В некоторых экзотических системах отрицательные кодируются не в дополнительном а в прямом коде, и там не сработает. Но прямой код сейчас можно встретить разве что в мантиссе чисел с плавающей точкой.

German_1984 ★★
()

А что если число уже равно std::numeric_limits<соответствующий_типа>::min() или std::numeric_limits<соответствующий_типа>::max()?

То же самое что и в случае с операциями обычного сложения/вычитания.

German_1984 ★★
()
Ответ на: комментарий от asaw

Ты бы хоть смотрел, что за ссылки даешь, хейтер. VS 2013 Preview.

По факту: using поддерживается (часто использую), variadic templates поддерживаются (часто использую), =delete/=default поддерживаются (почти не испоользую), по последнему пункту не знаю.

Я уже год пишу под винду и линупс на С++11, софт работает, проблем нет. В плане поддержки С++11 компилятором VS проблем почти не было. Реально в VS херово сделано разве что управление С++-проектами, постоянная дрочка с настройками Release/Debug/Release-with-debug просто убивает.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Ты бы хоть смотрел, что за ссылки даешь, хейтер. VS 2013 Preview.

на момент 2013 года студийный компилятор не казался ущербным на фоне gcc или clang

Вот это вот кто писал, вата? При чем тут Preview, когда тебе показывают положение дел на август 2013 года?

asaw ★★★★★
()
Ответ на: комментарий от asaw

Вот это вот кто писал, вата?

кондитер на VS лабает?

anonymous
()

Да, вроде, ни от чего зависеть не должно.

Забавно пошутили.

Miguel ★★★★★
()

looks like an April Fools post, call me paranoid

anonymous
()
Ответ на: комментарий от asaw

И чего?

«На момент 2013 года» надо понимать как «в конце 2013 года», потому как до этого никакого VS 2013 (хотя бы RC) не было, в августе был только Preview.

Поддержки С++11 как не было, так и нет до сих пор.

Например?

Понятно, что на 2015 RC так просто не перескочить сразу, а в 2013 что-то замысловатое на C++11 может и не собраться, но есть же (это до 2013 было совсем никак), в 2015 — тем более.

motto
()
Ответ на: комментарий от asaw

Вот это вот кто писал, вата? При чем тут Preview, когда тебе показывают положение дел на август 2013 года?

Ты упоротый штоле? Смотри ветку внимательно, разговор о 2013 годе была в контексте студии 2013. Тебе же ума хватило только взять первую ссылку из гугла.

Короче, хейтить надо с умом, когда в вопросе разбираешься. Пока только пена у рта.

staseg ★★★★★
()
Ответ на: комментарий от asaw

Факт в том, что под VS пишут самого разного вида C++11 код, но отсутвие поддержки ряда фич это сразу «Поддержки С++11 как не было, так и нет до сих пор», ок.

motto
()
Ответ на: комментарий от staseg

Я тебя ещё раз спрошу. Вот это вот кто написал?

на момент 2013 года студийный компилятор не казался ущербным на фоне gcc или clang

asaw ★★★★★
()
Ответ на: комментарий от staseg

В 2015 расширили поддержку С++11 и начали добавлять С++14. Насколько я помню на момент 2013 года студийный компилятор не казался ущербным на фоне gcc или clang.

В 2015 году эти наркоманы так и не осилили constexpr.

Stil ★★★★★
()
Ответ на: комментарий от staseg

постоянная дрочка с настройками Release/Debug/Release-with-debug просто убивает.

  1. А кто мешает CMake использовать c VS?
  2. А если не использовать CMake, то property sheets в помощь.
Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)

тред-детектор

anonymous
()

Да кому нужны эти проблемы виндузятников?

Solace ★★
()
Ответ на: комментарий от Stil

В 2015 году эти наркоманы так и не осилили constexpr.

Вот это да, наверное одна из самых заметных недоработок. AFAIK в 2015 уже появилась какая-то реализация.

staseg ★★★★★
()
Ответ на: комментарий от Begemoth

1. Я не знал, что она умеет CMake:)

2. Погуглю, спасибо. Когда я искал решение, все почему-то сводилось к тому, что зависимости .NET проектов она умеет нормально разруливать, а плюсовых — нет.

PS. Ближайшие несколько лет я скорее всего уже не увижу студию, а может и С++ вообще. Меняю работу и немного направление деятельности.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Зависимости студия для плюсовых проектов разруливать не умеет, но настройки, которые повторяются из проекта в проект, можно выносить в отдельные файлы (те самые property sheets), а затем продключать их к проектам.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

через wine что ли? :)

не, я лично такое видел, в Ъ-ынтырпрайз конторе, как с помощью autools собирались вендовые инсталляторы программного поделия :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

через wine что ли? :)

Используя libwine.

не, я лично такое видел, в Ъ-ынтырпрайз конторе, как с помощью autools собирались вендовые инсталляторы программного поделия :)

Мда. Использование же CMake под вендой вполне удобно и просто, причём и для сугубо вендовых проектов.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)

И сюда это гавно притащили. Для тех, кто в домике: оно и без расширений работает в стандартном сплюсе. Юмор просто гцц. Тред не читал, нафих нада.

anonymous
()
Ответ на: комментарий от cherry-pick

c++ тут совершенно ни при чем, оно и в джаве точно так же работает.

asaw ★★★★★
()
Ответ на: комментарий от staseg

казался, и ещё как. я тогда ещё с ним работала и точно помню, что не было variadic templates, а это офигенно удобная фича, которую я тогда давно уже юзала в gcc. а в студии её не было, кажется, даже в 2015. и ещё много чего не было. С++11 они не поддерживали целиком даже в 2015. и тараканы были в стандартной библиотеке ещё с 2010 студии, я им писала про них, и года через три они тараканов пофиксили и даже мне письмо написали об этом.
а если вспомнить все кривости вендозного DDK под 64 бита, то и вовсе страшно.
впрочем, я с тех пор больше к венде не подходила даже близко и очень этому рада. так что теперь мне уже всё равно. в линюксе, конечно, тоже свои тараканы бывают, но они хотя бы их фиксят быстро и стандарты поддерживают.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

В студии 2013 variadic templates работают, я ими частенько пользуюсь. Мы свой софт под винду собирали под 32 бита, не могу ничего сказать про 64.

UDP: Пруф.

ЗЫ. Я не ратую за офигенность студии, как это может быть кому-то показалось. Но она не такое лютое говно, как принято считать у типичного линупсоеда.

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от staseg

я сейчас уже не помню деталей и проверить не могу, ибо сейчас вообще с вендой не пересекаюсь. но точно помню, что у меня кроссплатформенный код не компилился и это было связано именно с тараканом в компиляторе и с variadic templates.

Iron_Bug ★★★★★
()
Ответ на: комментарий от staseg

В студии 2013 variadic templates работают

4.2. Шаблонов магия (комментарий)

Но она не такое лютое говно, как принято считать у типичного линупсоеда.

Она именно лютое говно, к сожалению, и в очередной раз обламывает всю малину.

asaw ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.