Форум программистов, компьютерный форум CyberForum.ru

Константы и C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Код Хаффмена. Передача кодового дерева http://www.cyberforum.ru/cpp-beginners/thread1119091.html
Имеется файл. Провел его закодирование по коду Хаффмена, подсчитал частоты символов, построил кодовое дерево, произвол закодирование. Как передать таблицу кодов в файле? Например, имеется таблица кодов: a - 11 b - 101 c - 100 d - 011 e - 010 f - 001 g - 0001
C++ Написать программу для ввода строк символов с терминала Написать программу для ввода строк символов с терминала, организовать код. счет числа символов и слов в виде функций. Введенные строки сохранять в массиве. Вывести результаты расчета на монитор и в файл. Помогите, пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1119083.html
C++ C++ telnet
Добрый день! как из программы запустить telnet и передать команду например Help Спасибо
Работа с файлами C++
Ребят у кого есть возможность распишите как лучше сделать для лабы надо. Заранее спасибо Задание: Создать структуру Работник, со следующими полями: имя, номер отдела, зарплата. Разработать приложение, которое: 1. записывает данные типа структура Работник в файл; 2. считывает данные из файла и выводит в консоль; 3. расчитывает среднее значение зарплаты по всем работникам.
C++ Найти произведение элементов столбца, в котором расположен элемент с наибольшим значением http://www.cyberforum.ru/cpp-beginners/thread1119044.html
Помогите пожалуйста с реализацией задачи! :) В данной действительной квадратной матрице порядка n найти произведение элементов столбца, в котором расположен элемент с наибольшим значением. Предполагается, что такой элемент единственный. Суть уловил, код набросал, но вот что-то не хватает, не пойму что)) #include "stdafx.h" #include <iostream>
C++ Заданы натуральные числа N, M и K Заданы натуральные числа N, M и K. Вычислить значение дроби с точностью до K знаков после запятой. Например, если дано N=13, M=7, K=5 , то ответ: 0,53846 . при к>25 :( Зарание спасибо!!! подробнее

Показать сообщение отдельно
DrOffset
6418 / 3792 / 876
Регистрация: 30.01.2014
Сообщений: 6,577
26.10.2014, 04:19     Константы и C++
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но если какой-то компилятор С++ "расширяет" значение определенно ошибочного кода, он будет выдавать диагностическое сообщение.
Не выдает, в этом и дело.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В частности, язык программирования, который реализуется компилятором g++ в режиме по умолчанию называется GNU++. Не надо путать его с С++, даже если эти языки несколько похожи друг на друга.
Даже в режиме -std=c++11, который как бы намекает нам на то, какой язык мы используем, диагностика не выдается и код компилируется. Вот пруф. Чтобы он начал выдавать предупреждение, нужно включить флаг -pedantic, или конкретно -Wvla. Переключения в режим С++11 или С++03, как видно, недостаточно.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Компилятор, который проглатывает вышеприведенный код молча не является компилятором С++.
Эта игра слов мне не нравится и вот почему:
1. gnu++ - это не язык, а набор расширений, которые реализует компилятор для с++.
2. Если некоторое множество расширений входит в компилятор по-умолчанию, это совершенно не значит, что данный компилятор не является компилятором С++. Компилятором С++ не является только тот компилятор, который не реализуется стандарт С++. А в стандарте С++ нет никаких явных запретов на расширения, так же, как нет конкретных требований для диагностики (есть рекомендации, более или менее жесткие, но нет конкретных указаний: "выдать ошибку" или "выдать предупреждение"). Следовательно тезис про то, что G++ - это не компилятор С++ ошибочен.

Хочу также напомнить вот что: в стандарте существует практика указания на жесткость требований, посредством использования определенных форм модальных глаголов. Вот например про массивы:
8.3.4
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.
Ну и, к примеру, про оператор присваивания:
12.8/19
An overloaded assignment operator must be declared to have only one parameter
Есть и более слабые формы will be и can be.
Очень часто разработчики компиляторов используют эти формулировки для того, чтобы определить уровень диагностики. Так что, до тех пор, пока в документе не повысится жесткость требований, трактовать отсутствие constant expression в качестве размерности массива как ошибку совсем необязательно. При этом мы не нарушим букву стандарта, следовательно останемся в рамках С++.
Это я к чему:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
но в любом случае они обязаны выдавать диагностические сообщения в ответ на формально ошибочный код.
Ошибка и расширенное поведение - это разные вещи. Плюс к этому, по цитатам выше видно, что стандарт не накладывает требований "обязан" (must) на размерность массива, оставляя лишь более слабое "должен" (shall).
 
Текущее время: 11:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru