Запитання з тегом «language-lawyer»

Питання щодо тонкощів формальних чи авторитетних специфікацій мов програмування та середовищ.


2
std :: ігнорувати зі структурованими прив'язками?
Прелюдія: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z введе синтаксис для структурованих прив'язок, що дозволить писати замість int a, b, c; std::tie(a, b, c) = f(); щось на зразок auto [a, b, c] = f(); Однак std::tieтакож дозволено вказати std::ignoreігнорувати певні компоненти, наприклад: std::tie(a, b, …

6
Чому посилання не є “const” у C ++?
Ми знаємо, що "змінна const" вказує на те, що коли вона призначена, ви не можете змінити змінну, наприклад: int const i = 1; i = 2; Програму вище не вдасться скомпілювати; gcc запитує з помилкою: assignment of read-only variable 'i' Немає проблем, я можу це зрозуміти, але наступний приклад мені …

2
Чому асинхронні автомати класів (а не конструкцій) у Roslyn?
Давайте розглянемо цей дуже простий метод асинхронізації: static async Task myMethodAsync() { await Task.Delay(500); } Коли я компілюю це за допомогою VS2013 (попередній компілятор Roslyn), сформований автомат-стан є структурою. private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } Коли я компілюю його з VS2015 (Roslyn), згенерований …



3
Чи правомірно вихідний код, що містить невизначену поведінку, призводить до збою компілятора?
Скажімо, я йду скомпілювати якийсь погано написаний вихідний код C ++, який викликає невизначену поведінку, і тому (як вони кажуть) "все може статися". З точки зору того, що специфікація мови С ++ вважає прийнятною для компілятора "конформний", чи включає "що-небудь" у цьому сценарії збої компілятора (або викрадення моїх паролів, або …

6
Чисті функції: Чи не означає "відсутність побічних ефектів" "Завжди однаковий результат, враховуючи однакові дані"?
Дві умови, що визначають функцію, pureтакі: Жодних побічних ефектів (тобто дозволяються лише зміни до місцевого масштабу) Завжди повертайте однакові результати, давши однакові дані Якщо перша умова завжди відповідає дійсності, чи бували випадки, коли друга умова не відповідає дійсності? Тобто це дійсно потрібно лише з першою умовою?

3
Чи завжди покажчик із правильною адресою та типом завжди є дійсним покажчиком з C ++ 17?
(Стосовно цього питання та відповіді .) До стандарту C ++ 17 у [basic.compound] / 3 було включено таке речення : Якщо об’єкт типу T знаходиться за адресою A, вказівник типу cv T *, значення якого є адресою A, вказує на цей об’єкт, незалежно від того, як було отримано значення. Але …

2
Чи все ще безпечно видаляти nullptr у c ++ 0x?
Тут c++03цілком зрозуміло, що видалення нульового вказівника ніяк не впливає. Справді, прямо зазначено, §5.3.5/2що: В будь-якому варіанті, якщо значення операнда delete є нульовим покажчиком, операція не впливає. Тим НЕ менше, в поточному проекті для c++0xцієї пропозиції , здається, відсутня. В решті чернетки я міг знайти лише речення, що вказують, що …

6
Чи "new" в "new int;" вважається оператором?
Вираз new int;типу in int * x = new int;є новим виразом . Термін "новий оператор", схоже, використовується як взаємозамінний із "новим виразом", наприклад у цьому питанні: Різниця між "новим оператором" та "оператором новим"? Чи правильно говорити, що ключове слово newв новому виразі є оператором? Чому чи чому б ні? …

4
Різна поведінка оператора коми у C ++ з поверненням?
Це (зверніть увагу на оператор коми ): #include <iostream> int main() { int x; x = 2, 3; std::cout << x << "\n"; return 0; } виходи 2 . Однак, якщо ви використовуєте returnз оператором-комою, це: #include <iostream> int f() { return 2, 3; } int main() { int x; …

9
Чи може код, який ніколи не буде виконаний, викликати невизначену поведінку?
Код, який викликає невизначену поведінку (у цьому прикладі ділення на нуль) ніколи не буде виконаний, чи програма все ще невизначена? int main(void) { int i; if(0) { i = 1/0; } return 0; } Я думаю, що це все ще невизначена поведінка, але я не можу знайти жодних доказів у …

4
Як ця структура може мати sizeof == 0?
Існує стара публікація з проханням про конструкцію, для якої sizeofслід повернутися 0. Є декілька високих балів відповідей від користувачів з високою репутацією, які заявляють, що за стандартом жоден тип або змінна не може мати розмір 0. І я на 100% з цим погоджуюсь. Однак є нова відповідь, яка представляє таке …


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.