Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параметры метода, зависящие от шаблона 
V
    Опции темы
ANTON_AL
Дата 17.9.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня.

Вот такая ситуация:

В приведённом коде класс A, принимает в качестве шаблонного параметра нечто, у чего есть член Count

Код

#include <conio.h>
#include <iostream>
using namespace std;




template< class T >
class A
{
    public:
        void SomeMethod( int *pFrames[T::Count] );
};




template< class T >
void A<T>::SomeMethod( int *pFrames[T::Count] )
{

}  //Here i cause an error




void main( )
{
    

    getch( );
}




В результате компиляции получаю ошибку error C2244: 'A<T>::SomeMethod' : unable to match function definition to an existing declaration.

У меня есть предположение, что происходит конфликт между объявлением шаблона  и тем шаблонным параметром, который явно передаётся в A< > в месте, где описана реализация метода. Но как это обойти?? И в этом ли причина??

Это сообщение отредактировал(а) ANTON_AL - 17.9.2007, 16:45
PM MAIL   Вверх
Fazil6
Дата 17.9.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



глянь в MSDN описание этой ошибки.
Решается просто
Код

#include <conio.h>
#include <iostream>
using namespace std;




template< class T >
class A
{
    public:
        void SomeMethod( int *pFrames[T::Count] )
         {}
};






void main( )
{
    

    getch( );
}

PM MAIL   Вверх
MAKCim
Дата 17.9.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



ANTON_AL, 
какой компилятор?
GCC 4.1.2 компилирует нормально


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Fazil6
Дата 17.9.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



кстати помоему ты чего-то нето тут придумал
Код

int *pFrames[T::Count]

PM MAIL   Вверх
ANTON_AL
Дата 17.9.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



MAKCim
    Я под VisualStudio.


Fazil6, 
   кстати помоему ты чего-то нето тут придумал
Это необходимость. На вход нужно ожидать массив только такого размера, как в T::Count
PM MAIL   Вверх
Fazil6
Дата 17.9.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(ANTON_AL @  17.9.2007,  17:08 Найти цитируемый пост)
Это необходимость. На вход нужно ожидать массив только такого размера, как в T::Count

ну если тока Count объявлен как static
PM MAIL   Вверх
MAKCim
Дата 17.9.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Fazil6, 
или enum  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 17.9.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Судя по объявлению T::Count он только и может быть enum или static...
Хотя... еще, конечно может быть типом или методом... smile 

Только вот насчет необходимости... Что-то я сомневаюсь, что таким образом ты пресечешь попытку вызвать SomeMethod с адресом массива, где два элемента. Или 5. В общем, любым. Это все же С, не забывай. В гробу он видал размеры встроенных массивов.
Тогда уж объяви встроенный тип typedef int*[T::Count] CFrames; 
Да и то, не уверена, что поможет.
В любом случае, как-то это дурно пахнет.



--------------------
...
PM   Вверх
ANTON_AL
Дата 17.9.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Earnest, 
   как-то это дурно пахнет.

Эх. . .Пахло бы очень хорошо, если б я мог пресечь ( раньше почему то  думал, что мог ).

Ну тогда от этой затеи придётся отказаться, а сделать просто **ppArray.

Странно, а какой вообще тогда смысл в таких параметрах . . .
Код

void func1( int *pArray[6] ){ }

. . .если они не на что не влияют.

Это, получается эквивалентно такому
Код

void func1( int **ppArray ){ }



Но всёравно от первого метода есть польза: раз уж он что то и не пресекает, зато он обеспечивает наглядность в коде, и, хотелось бы всётаки как-то оставить такое объявление. Придётся поломать голову. . .

Fazil6
   Решается просто
Да, но, боюсь представить себе границы объявления класса  smile 

 smile 
Earnest, Ты, оказывается, женщина . . . Уже второе моё заблуждение за сегодня. smile 

Это сообщение отредактировал(а) ANTON_AL - 17.9.2007, 18:42
PM MAIL   Вверх
ANTON_AL
Дата 17.9.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Так просто оказалось:
Код



template< class T >
class A
{
    static const int Count = T::Count;


    public:
        void Method1( int *pArray[Count] );
};





template< class T >
void A<T>::Method1( int *pArray[Count] )
{

}

PM MAIL   Вверх
Skladnoy
Дата 17.9.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Цитата(ANTON_AL @  17.9.2007,  18:35 Найти цитируемый пост)

Странно, а какой вообще тогда смысл в таких параметрах . . .
Код

void func1( int *pArray[6] ){ }

. . .если они не на что не влияют.

Это указание программисту, что функция ожидает массив именно такой длины. Компилятор, правда, проглотит все подряд
PM MAIL   Вверх
Fazil6
Дата 17.9.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Skladnoy @  17.9.2007,  21:40 Найти цитируемый пост)
Компилятор, правда, проглотит все подряд

делайте как ссылку на массив и ничего компиллятор глотать не будет.
Код

void func1( int *(&pArray)[6] ){ }

PM MAIL   Вверх
Skladnoy
Дата 18.9.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Цитата(Fazil6 @  17.9.2007,  21:57 Найти цитируемый пост)
делайте как ссылку на массив и ничего компиллятор глотать не будет.

1. Если надо передать именно указатель - надо делать страшный каст. 
2. В С нет ссылок (только в С++)
PM MAIL   Вверх
zkv
Дата 18.9.2007, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Skladnoy @  18.9.2007,  00:47 Найти цитируемый пост)
В С нет ссылок (только в С++) 

а шаблоны есть?  smile 
Это я к названию темы, если что...
PM MAIL   Вверх
Earnest
Дата 18.9.2007, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Мне кажется, тут не стоит быть святее папы римского. В C++ при желании можно обойти любые ограничения. Главное - явно обозначить намерения. Сделать это можно хоть таким кодом (с явным указанием размера), хоть комментарием... я бы ограничилась комментарием. А в функции устроить дополнительную проверку - что память по переданному указателю не меньше предполагаемой.


--------------------
...
PM   Вверх
MAKCim
Дата 18.9.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Earnest @  18.9.2007,  07:37 Найти цитируемый пост)
В C++ при желании можно обойти любые ограничения.

не все, но большинство  smile 
хотя тут от компилятора зависит

Это сообщение отредактировал(а) MAKCim - 18.9.2007, 08:43


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 18.9.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(MAKCim @  18.9.2007,  08:43 Найти цитируемый пост)
не все, но большинство  smile 

ну кроме совсем встроенных, типа конкретности количества шаблонных параметров...

а насчет типов reinterpret_cast бьёт всё smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Skladnoy
Дата 18.9.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Цитата(zkv @ 18.9.2007,  01:26)
Цитата(Skladnoy @  18.9.2007,  00:47 Найти цитируемый пост)
В С нет ссылок (только в С++) 

а шаблоны есть?  smile 
Это я к названию темы, если что...

Да там вообще ничего нет.  Ну, почти... Просто ковыряюсь в последнее время именно с С. 

Кстати, если реально нужны массивы фиксированной длины можно использовать что-то вроде.
Код

template<class T, int N>
class Array {
public:
    T data[N];
    T& operator[] { ... }

    И т.д.

PM MAIL   Вверх
zkv
Дата 18.9.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(JackYF @  18.9.2007,  14:39 Найти цитируемый пост)
а насчет типов reinterpret_cast бьёт всё

под VC++8.0
Код

    const char *constPtr = "xexe";
    char *volPtr = reinterpret_cast<char *>( constPtr );

Цитата

error C2440: 'reinterpret_cast' : cannot convert from 'const char *' to 'char *'
        Conversion loses qualifiers

 так что не так уж он всемогущ smile 
PM MAIL   Вверх
JackYF
Дата 18.9.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(zkv @  18.9.2007,  20:34 Найти цитируемый пост)
так что не так уж он всемогущ smile  

согласен... хорошо, const_cast + reinterpret_cast бьют всё smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 18.9.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(JackYF @  18.9.2007,  21:25 Найти цитируемый пост)
согласен... хорошо, const_cast + reinterpret_cast бьют всё 

не все
Код

const int count = 0;

int main() {
    *const_cast<int*>(&count) = 1;
    return 0;
}

в runtime будет Segmentation Fault (по крайнй мере на нормальной системе с нормальным компилятором)

Добавлено через 2 минуты и 37 секунд
да, вот еще
Код

class some {
    int variable;
};

int main() {
    some a;
    int b = reinterpret_cast<some>(a);
    return 0;
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 18.9.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(MAKCim @  18.9.2007,  21:40 Найти цитируемый пост)
по крайнй мере на нормальной системе с нормальным компилятором

ну в случае попытке записи в область, помеченную как неизменяемую - да smile


Цитата(MAKCim @  18.9.2007,  21:40 Найти цитируемый пост)
int b = reinterpret_cast<some>(a);

не, ну тут решается

Код

int b = *(reinterpret_cast<int*>(some));



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Earnest
Дата 19.9.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Что-то вы увлеклись <cast>... А про убойную силу приведения в стиле C забыли? Ему что const, что не-const... Конечно, никто не гарантирует, что программа не упадет (2MAKCim), но речь ведь шла о том, чтобы надуть компилятор.  
Т.е. сначала речь была о том, как написать безопасный код. А потом плавно перешли на то, как эту безопасность обойти...
smile  smile  smile 


--------------------
...
PM   Вверх
JackYF
Дата 19.9.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Earnest @  19.9.2007,  10:52 Найти цитируемый пост)
А потом плавно перешли на то, как эту безопасность обойти...

ну правильно, врага надо знать в лицо smile
чтобы создать еще больше трудностей по обходу нашего "безопасного" кода

Цитата(Earnest @  19.9.2007,  10:52 Найти цитируемый пост)
А про убойную силу приведения в стиле C забыли?

да, подзабыли  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 19.9.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



JackYF, 
Цитата(JackYF @  18.9.2007,  23:06 Найти цитируемый пост)
не, ну тут решается
int b = *(reinterpret_cast<int*>(some));

сам посуди, что ты написал
если мы some приведем к указателю, то мы по сути переменной b присвоим значение, которое лежит по адресу some.variable, а не саму variable

Добавлено через 1 минуту и 44 секунды
Цитата(Earnest @  19.9.2007,  10:52 Найти цитируемый пост)
А про убойную силу приведения в стиле C забыли? Ему что const, что не-const... 

имхо, как раз reinterpret_cast<> соответствует приведению в стиле С


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 19.9.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(MAKCim @  19.9.2007,  14:56 Найти цитируемый пост)
соответствует приведению в стиле С 

нет, я проверил... ему действительно пофиг: const char* к char* приведёт за милую душу, в отличие от reinterpret_cast

Цитата(MAKCim @  19.9.2007,  14:56 Найти цитируемый пост)
мы по сути переменной b присвоим значение, которое лежит по адресу some.variable

ну да. А ты что хотел сделать?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 19.9.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(JackYF @  19.9.2007,  22:15 Найти цитируемый пост)
ну да. А ты что хотел сделать?

присвоить b значение some.variable


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 20.9.2007, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(MAKCim @  19.9.2007,  23:21 Найти цитируемый пост)
присвоить b значение some.variable

Цитата(MAKCim @  19.9.2007,  14:56 Найти цитируемый пост)
то мы по сути переменной b присвоим значение, которое лежит по адресу some.variable

не понял различия...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 20.9.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



JackYF, 
тут
Код

b = *reinterpret_cast<int*>(some);

объект some (занимает 4 байта) приводится к указателю, т. е some.variable становится адресом
значение по этому адресу присваивается переменной b
тут же
Код

b = reinterpret_cast<int>(some);

значение some.variable становится значением b
вот различие на ассемблере
1.
Код

; [ebp - 8] - переменная b, [ebp - 4] - объект some
    mov    eax, dword ptr [ebp - 4]
    mov    eax, dword ptr [eax]
    mov    dword ptr [ebp - 8], eax

2.
Код

; [ebp - 8] - переменная b, [ebp - 4] - объект some
    mov    eax, dword ptr [ebp - 4]
    mov    dword ptr [ebp - 8], eax



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 20.9.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Блин, минут 10 пытался въехать, что у меня неправильно smile

Конечно же, я имел ввиду с самого начала
Код

b = *(reinterpret_cast<int*>(&some));



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
UnrealMan
Дата 20.9.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(JackYF @ 20.9.2007,  10:41)
Конечно же, я имел ввиду с самого начала
Код

b = *(reinterpret_cast<int*>(&some));

А теперь скажи, зачем нужны такие навороты с указателями?

Код

b = reinterpret_cast<int &>(some);


Добавлено @ 13:49
Цитата(MAKCim @ 19.9.2007,  15:56)
Цитата(Earnest @  19.9.2007,  10:52 Найти цитируемый пост)
А про убойную силу приведения в стиле C забыли? Ему что const, что не-const... 

имхо, как раз reinterpret_cast<> соответствует приведению в стиле С

Соответствует только в определённых случаях (когда static_cast не подходит и когда не выполняется const_cast).

Это сообщение отредактировал(а) UnrealMan - 20.9.2007, 13:51
PM MAIL   Вверх
JackYF
Дата 20.9.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(UnrealMan @  20.9.2007,  13:46 Найти цитируемый пост)
b = reinterpret_cast<int &>(some);

хм, действительно.

С указателями так раньше надо было при приведении в стиле Си, вот и образовалась привычка.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
UnrealMan
Дата 20.9.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(JackYF @  20.9.2007,  16:31 Найти цитируемый пост)
С указателями так раньше надо было при приведении в стиле Си

И только в самом C, потому что там не было ссылок smile
PM MAIL   Вверх
MAKCim
Дата 20.9.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



UnrealMan, 
ссылки - это синтаксический сахар + изменение семантики на уровне языка
на нижнем уровне нет разницы между ссылкой и указателем


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 21.9.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Насчет того, что reinterpret_cast аналогичен C-cast: по сути да, но не по убойной силе. 
Вот это забыли?
Цитата

error C2440: 'reinterpret_cast' : cannot convert from 'const char *' to 'char *'
        Conversion loses qualifiers





--------------------
...
PM   Вверх
UnrealMan
Дата 21.9.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Earnest @  21.9.2007,  12:29 Найти цитируемый пост)
Насчет того, что reinterpret_cast аналогичен C-cast: по сути да

С таким же успехом я могу сказать, что reinterpret_cast аналогичен static_cast (есть случаи, когда они делают одно и то же).

Это сообщение отредактировал(а) UnrealMan - 21.9.2007, 11:55
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0913 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.