|
Возврат значения char */char const * |
|
|
|
May 10 2017, 10:28
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Имеется функция: char *StrFunc(char const *str) {} Внутри она использует str именно как char const * (только чтение) и потом возвращает например: str+N (N - типа int). Но в качестве вх. аргумента в неё могут передаваться как char * так и char const * - нет проблем, приведение типа делается автоматом. Но хочется, чтобы и возвращаемое значение было того же типа, что и передано: для char * - char *, для char const * - char const *. Чтобы не было необходимости делать: char const *s; ... ; s = (char const *)StrFunc(s); Понятно, что можно объявить inline функцию, в которой сделать приведение к нужному типу. Но тогда, с низким уровнем оптимизации, функция не будет заинлайнена. Или можно перегрузить эту функцию с другим типом аргумента/возвращаемого значения - опят будут две функции, выполняющие одно действие. Может есть более элегантное решение? Как бы так объявить алиас для данной функции с другим типом аргумента/возвращаемого значения?
|
|
|
|
|
 |
Ответов
|
May 11 2017, 11:36
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Что-то не понял, почему нельзя возвращать указатель на константу? Тогда оно "само" приведётся к неконстанте, если потребуется. Код char const *StrFunc(char const *str) { return str + 5; }
int main(void) { const char str1[] = "Hello, world!\n"; char str2[] = "Hello, world!\n"; const char *res1 = StrFunc (str1); char *res2 = StrFunc (str2); printf(res1); printf(res2); return 0; } UPDATE. Чёрт, опять часть варнингов потерялась... Код warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] char *res2 = StrFunc (str2); Да-а, беда. Плюсы с перезагрузкой ждут Вас :-)
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
May 17 2017, 07:09
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(esaulenka @ May 11 2017, 13:36)  Что-то не понял, почему нельзя возвращать указатель на константу? Тогда оно "само" приведётся к неконстанте, если потребуется. ... UPDATE. Чёрт, опять часть варнингов потерялась... Вот именно. Цитата(esaulenka @ May 11 2017, 13:36)  Да-а, беда. Плюсы с перезагрузкой ждут Вас :-) Во-первых - перегрузка. И я писал в исходном сообщении, что это нежелательный путь, так как по сути - будут две одинаковые функции. Тогда уж лучше использовать вариант с inline одной из них. Цитата(demiurg_spb @ May 11 2017, 16:37)  __builtin_constant_p У меня IAR
|
|
|
|
Сообщений в этой теме
jcxz Возврат значения char */char const * May 10 2017, 10:28 scifi Цитата(jcxz @ May 10 2017, 13:28) Имеется... May 10 2017, 10:38 jcxz Цитата(scifi @ May 10 2017, 12:38) Причём... May 10 2017, 11:52  novikovfb Цитата(jcxz @ May 10 2017, 15:52) Вот есл... May 10 2017, 11:56   k155la3 Цитата(novikovfb @ May 10 2017, 14:56) ша... May 10 2017, 14:37  scifi Цитата(jcxz @ May 10 2017, 14:52) Плохое ... May 10 2017, 12:19   jcxz Цитата(scifi @ May 10 2017, 14:19) Как жи... May 10 2017, 12:41  Сергей Борщ QUOTE (jcxz @ May 10 2017, 14:52) А как ж... May 10 2017, 14:14 Сергей Борщ QUOTE (jcxz @ May 10 2017, 13:28) Понятно... May 10 2017, 11:41 Шаманъ Цитата(jcxz @ May 10 2017, 13:28) Имеется... May 10 2017, 18:25 demiurg_spb https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gc...r-Bu... May 11 2017, 14:37 krux А вариант с union вам не подойдет ? May 17 2017, 09:44 jcxz Цитата(krux @ May 17 2017, 11:44) А вариа... May 17 2017, 10:25 Arlleex Под рукой нет компилятора, но, на мой взгляд, было... Jan 11 2018, 19:48 jcxz Цитата(Arlleex @ Jan 11 2018, 21:48) Под ... Jan 11 2018, 21:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|