Этот ответ во многом посвящен комментарию, сделанному @ RafałDowgird:
«Минимальный размер операций - это int». - Это было бы очень странно (что относительно архитектур, которые эффективно поддерживают char / короткие операции?) Действительно ли это в спецификации C ++?
blockquote>Имейте в виду, что стандарт C ++ имеет важное значение правило «как-если». См. Раздел 1.8: Исполнение программы:
3) Это положение иногда называют правилом «как есть», поскольку реализация может игнорировать любое требование Стандарта, пока результат как если бы это требование выполнялось, насколько это можно определить из наблюдаемого поведения программы.
blockquote>Компилятор не может установить
int
размером 8 бит, даже если он был самым быстрым, так как стандарт предусматривает 16-битный минимумint
.Поэтому, в случае теоретического компьютера с супербыстрого 8-битными операциями, неявное продвижение к
int
для арифметики может иметь значение. Однако для многих операций вы не можете определить, действительно ли компилятор выполнял операции с точностьюint
, а затем преобразовывался вchar
для хранения в вашей переменной или если операции выполнялись в символе все время.Например, рассмотрим
unsigned char = unsigned char + unsigned char + unsigned char
, где добавление будет переполняться (допустим, значение 200 для каждого). Если вы повысились доint
, вы получите 600, которые затем будут неявно сбрасываться вunsigned char
, который будет обертывать по модулю 256, таким образом давая окончательный результат 88. Если вы не делали таких рекламных акций, вы бы необходимо обернуть между двумя первыми дополнениями, что уменьшит проблему с200 + 200 + 200
до144 + 200
, что составляет 344, что уменьшится до 88. Другими словами, программа не знает разницы, поэтому компилятор свободен для игнорировать мандат на выполнение промежуточных операций вint
, если операнды имеют более низкий рейтинг, чемint
.Это в целом относится к сложениям, вычитанию и умножению. Это не верно в общем случае для деления или модуля.
Наконец-то нашли решение
Шаблон:
<input type="file" [multiple]="multiple" #fileInput class="browse-btn" (change)="readFile()" accept=".xlsx">
<button type="button" class="btn btn-info btn-lg" (click)="upload()" >Upload</button>
Компонент:
public upload() {
const inputEl: HTMLInputElement = this.inputEl.nativeElement;
const fileCount: number = inputEl.files.length;
const formData = new FormData();
const headers = new Headers();
headers.set('Accept', 'application/json');
headers.delete('Content-Type'); // mandate for accepting binary content
if (fileCount > 0) {
for (let i = 0; i < fileCount; i++) {
formData.append('file', inputEl.files.item(i));
}
try {
this.loaderForFileUpload = true;
this.http
.post('http://urlForFileUpload', formData, { headers: headers })
.subscribe(response => {
if (response.status === 200) {
this._toastr.success('File uploaded successfully', 'Success!');
}
}, error => {
this._toastr.error('File contents mismatch', error.statusText);
});
} catch (e) {
console.log('Error occured while posting uploaded file. See below message for details : \n');
console.log(e);
}
}
}