|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
Тема
|
то бива презастраховане, ама...
|
|
Автор |
~!@$%^amp;*()_+ (целия горен ред) |
Публикувано | 16.12.04 02:56 |
|
ето какво открих днес:
if (this == NULL) return 0;
| |
|
| |
Тема
|
Re: то бива презастраховане, ама...
[re: ~!@$%^amp;*()_+]
|
|
Автор | bahorian (Нерегистриран) |
Публикувано | 16.12.04 10:02 |
|
heh, assert(this != 0) ili assert(this) are (az lichno go polzvam, osobeno ako moia kod bi go polzval drug dev), ama takiva bastuni navremeto gi shibahme izotzadze, a sia pokrai demokraciata mnogo se otpusnaha deiba :)
| |
Тема
|
Re: то бива презастраховане, ама...
[re: bahorian]
|
|
Автор | slim shady (Нерегистриран) |
Публикувано | 16.12.04 10:07 |
|
muahahhah
| |
Тема
|
Re: то бива презастраховане, ама...
[re: ~!@$%^amp;*()_+]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 16.12.04 10:39 |
|
Работата е там, че има една малко шибана С практика прясно дефинираните структури да се 'инициализират' с memset, което в повечето случаи се дължи на незнание за съществуването на aggregate initializer синтаксиса.
Нали се сещаш какво става като се приложи тази 'практика' (а навикът е втора природа) върху инстанция на клас? :))
| |
Тема
|
Re: то бива презастраховане, ама...
[re: bahorian]
|
|
Автор |
Questor (работник) |
Публикувано | 16.12.04 11:54 |
|
Хехе и даже ша ти се накарат що не си сложил assert и са дебъгвали заради тебе
Сигнатура!
| |
Тема
|
Нищо лошо не става....
[re: Paдo]
|
|
Автор | Пeнчo (Нерегистриран) |
Публикувано | 16.12.04 12:06 |
|
ако се прилага върху обект от клас.- Ако класа (и неговите предшественици) няма виртуални функции.
| |
Тема
|
Re: Нищо лошо не става....
[re: Пeнчo]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 16.12.04 12:39 |
|
Ъхъ. Ама като подход е 'много добро'. И грешката (няма начин да не се получи, все някога ще се memset-не каквото не трябва) на мен ми изглежда трудно откриваема. Винаги, когато се забърквам с чужд код претърсвам за memset, memmove, ... и искам подробно обяснение защо всъщност се използват. Иначе не се захващам.
| |
Тема
|
Re: то бива презастраховане, ама...
[re: Paдo]
|
|
Автор | stef (Нерегистриран) |
Публикувано | 16.12.04 15:44 |
|
Съгласен съм за това, че memset не трябва да се използва за инициализация на обекти, но дали причината за this != 0 е в това?
Според мен по скоро е в откриване на грешки дължащи се на нулеви указатели (примера по-долу). Това е недефинирано поведение според стандарта, но във VC++ например ще се влезе в методите на класа и дори те могат да се изпълнят без проблем (например, ако по-долу се закоментира реда с присвояването на a). С други думи това е една допълнитела идиотоустойчивост (но само срещу идиоти използващи VC++ и компилатори с подобно поведение, с други компилатори няма да помогне). Аз лично не бих я използвал, защото за повечето програмисти би било код-загадка, а и не е преносимо.
Пример:
#include <cassert>
class A {
int a;
public:
m()
{
assert(this != 0);
a = 0;
}
};
int main()
{
((A*)0)->m();
return 0;
}
| |
Тема
|
Re: то бива презастраховане, ама...
[re: stef]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 16.12.04 16:15 |
|
Интересно, не бях се сетил за това :)
Номерът с каст на 0 към нещо съм го виждал само в дефиницията на offsetof.
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
|
|
|