Russian Qt Forum

Программирование => С/C++ => Тема начата: Alex Custov от Август 31, 2010, 15:11



Название: +"str"
Отправлено: Alex Custov от Август 31, 2010, 15:11
Что делает конструкция

Код
C++ (Qt)
const char *p = +"-i";

? :)


Название: Re: +"str"
Отправлено: BRE от Август 31, 2010, 15:21
Что делает конструкция

Код
C++ (Qt)
const char *p = +"-i";

? :)
IMHO, тоже что и
Код
C++ (Qt)
const char *p = "-i";


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 01, 2010, 07:48
Это зачем выдумать так нужно было?


Название: Re: +"str"
Отправлено: lit-uriy от Сентябрь 01, 2010, 08:04
>>Это зачем выдумать так нужно было?
скорее всего до плюса, что-то было. Потом не понадобилось, удалили. А про плюс забыли


Название: Re: +"str"
Отправлено: zenden от Сентябрь 01, 2010, 10:33
И что же до плюса могло быть?


Название: Re: +"str"
Отправлено: Alex Custov от Сентябрь 01, 2010, 12:59
я писал более сложную конструкцию из QStringList() << "a" << "b" << ..., и случайно нажал + перед "a", забыв о нём, я откомпилил. Так обнаружилась верная с точки зрения языка конструкция
Код
C++ (Qt)
+"a"
Теперь вот сижу думаю, что она означает исходя из того, что -"a" конструкция уже неверная :)


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 01, 2010, 14:07
Так тоже можно

   const char *s = "i";
   const char *p =  +s;


Название: Re: +"str"
Отправлено: spectre71 от Сентябрь 02, 2010, 13:26
"+" в данном случае унарная операция.

int a = 10;  // a == 10
int b = +10; // b == 10
int c = -10; // c == -10

Аналогично:

const char *t = "-i"; // t == адрес строки("-i")
const char *p = +"-i"; // p == адрес строки("-i")
const char *r = -"-i"; // r == - адрес строки("-i")




Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 02, 2010, 13:38
"+" в данном случае унарная операция.

int a = 10;  // a == 10
int b = +10; // b == 10
int c = -10; // c == -10

Аналогично:

const char *t = "-i"; // t == адрес строки("-i")
const char *p = +"-i"; // p == адрес строки("-i")
const char *r = -"-i"; // r == - адрес строки("-i")


const char *r = -"-i"; не катит


Название: Re: +"str"
Отправлено: spectre71 от Сентябрь 02, 2010, 13:53
const char *r = -"-i"; не катит

Не важно. Важен принцип. А почему компилятор переваривает +"-i"; - вопросы к его разработчикам.


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 02, 2010, 13:56
Да как бы в VS2010 тоже самое. Просто так правильно, разработчики тут не причем.


Название: Re: +"str"
Отправлено: spectre71 от Сентябрь 02, 2010, 14:09
Да как бы в VS2010 тоже самое. Просто так правильно, разработчики тут не причем.

Опять же не важно.
+"str";  ничего не меняет с точки зрения синтаксиса, видимо из-за этого ее считают допустимой
-"str";  является недопустимой для данного типа.

Вот так можно:
int aaa = -(int)"bbb";


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 02, 2010, 14:14
Код:
	int a = -5;
int b = 5;

const char *str_1 = reinterpret_cast<const char*>(a);
const char *str_2 = reinterpret_cast<const char*>(b);

str_1 и str_2 будут разными адресами.


Название: Re: +"str"
Отправлено: spectre71 от Сентябрь 02, 2010, 14:22
Код:
	int a = -5;
int b = 5;

const char *str_1 = reinterpret_cast<const char*>(a);
const char *str_2 = reinterpret_cast<const char*>(b);

str_1 и str_2 будут разными адресами.

Ну и что. Все правильно. Правда оба указателя будут невалидными.


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 02, 2010, 15:19
Ну так для строки "+" это валидный указатель, а "-" нет.


Название: Re: +"str"
Отправлено: spectre71 от Сентябрь 02, 2010, 15:23
Ну так для строки "+" это валидный указатель, а "-" нет.

Это про что? О чем речь?


Название: Re: +"str"
Отправлено: m_ax от Сентябрь 02, 2010, 15:48
Насколько мне известно, унарный оператор "+", в отличие от "-", ничевошеньки не делает)
Его ввели только ради симметрии с унарным оператором "-".
Для пользовательских типов его ("+") можно определить как вам вздумается (всё зависит от вашей буйной вантазии).
 :)


Название: Re: +"str"
Отправлено: Alex_cs_gsp от Сентябрь 02, 2010, 17:22
Ну так для строки "+" это валидный указатель, а "-" нет.

Это про что? О чем речь?

О языкозаплетании... имел ввиду ёператор.