forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   mutable volatile extern register auto typename explicit (http://forum.boolean.name/showthread.php?t=15451)

impersonalis 08.09.2011 15:46

mutable volatile extern register auto typename explicit
 
Небольшой список "экзотических" ключевых слов (virtual, static и компания сюда не относятся :) ) с описаниями. Если по одной ссылке (на мой взгляд) сложно составить мнение о команде или рассказывается лишь одна область применения, то указаны несколько источников

mutable
http://www.quizful.net/post/cpp-keywords-usage
http://alenacpp.blogspot.com/2005/10...constcast.html

volatile
http://www.quizful.net/post/cpp-keywords-usage
http://alenacpp.blogspot.com/2006/04/volatile.html

extern
http://www.quizful.net/post/cpp-keywords-usage
http://www.sbp-program.ru/SBP-C-Memory-Class.htm#extern
http://www.gamedev.ru/code/forum/?id=56367

register
http://www.quizful.net/post/cpp-keywords-usage

auto
http://www.quizful.net/post/cpp-keywords-usage

typename
http://alenacpp.blogspot.com/2006/08/typename.html

explicit
http://jia3ep.blogspot.com/2008/07/e...nstructor.html
http://alenacpp.blogspot.com/2009/09/blog-post.html

const_cast
http://alenacpp.blogspot.com/2005/10...constcast.html
http://alenacpp.blogspot.com/2005/08/c.html

reinterpret_cast
http://alenacpp.blogspot.com/2005/08/c.html

dynamic_cast
http://alenacpp.blogspot.com/2005/08/c.html
http://ru.wikipedia.org/wiki/Dynamic_cast

static_cast
http://alenacpp.blogspot.com/2005/08/c.html
http://www.rsdn.ru/article/cpp/static_cast.xml

falcon 08.09.2011 18:45

Ответ: mutable volatile extern register auto typename explicit
 
имхо - тут ничего экзотического..
C-style касты в плюсовом коде юзать моветон, так что плюсовые касты ну никак не экзотические..
спецификаторы вроде тоже штука не экзотическая и встречается часто.. ну вот volatile да, не все знают. И то, в куче чтива о потокобезопасных синглтонах на него ссылаются..
вот export - риально экзотика.. да ещё какая :D

impersonalis 08.09.2011 20:54

Ответ: mutable volatile extern register auto typename explicit
 
экспорт такая экзотика, что в каждом проекте DLL встречается.
Потокобезопасных синглтонов по сути не бывает: можно сделать грязный хак, который не на каждом компиляторе запустится.
Ну я тоже могу обосрать - мало не покажется (жаль только время тратить).
имхо..

ffinder 08.09.2011 21:32

Ответ: mutable volatile extern register auto typename explicit
 
последние четыре выбрасывай, все cast'ы плюсовые явно не редкость в коде.

impersonalis 08.09.2011 21:34

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

Сообщение от ffinder (Сообщение 201697)
последние четыре выбрасывай, все cast'ы плюсовые явно не редкость в коде.

у кого-то и goto не редкость. Понятное дело, что список весьма условный.

moka 08.09.2011 21:34

Ответ: mutable volatile extern register auto typename explicit
 
Опа, за volatile спасибо, на самом деле нужная штука, т.к. в C# много приходится с потоками работать, и ловил такую проблему, где цикл в потоке нужно было отменять, но не грубо, а лишь заставить его закончиться, вот тут и была проблема, теперь не будет :)

den 08.09.2011 21:49

Ответ: mutable volatile extern register auto typename explicit
 
а в чём смысл auto ? (не очень понял) (не которое появилось в c++11, а которое сейчас)

HolyDel 08.09.2011 21:49

Ответ: mutable volatile extern register auto typename explicit
 
auto душевен в C++0x. а раньше был не нужен, да. по сути семантика auto это значит, что переменная объявляется в стеке. но она итак объявляется в стеке без всяких дополнительных слов.
mutable нужен для кеширования результата.
explicit тоже нужен часто.

falcon 08.09.2011 21:58

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

Ну я тоже могу обосрать - мало не покажется (жаль только время тратить).
я в общем-то и не обсирал тебя.

Цитата:

экспорт такая экзотика, что в каждом проекте DLL встречается.
http://ru.wikipedia.org/wiki/C%2B%2B...2.D0.BE_export

чочо, прям в каждой длл-ке такой export для шаблонов есь??..

impersonalis 08.09.2011 22:20

Ответ: mutable volatile extern register auto typename explicit
 
пардон, прочитал (и далее осознавал) как extern

.Squid 08.09.2011 22:50

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

Сообщение от HolyDel (Сообщение 201702)
mutable нужен для кеширования результата.

Поясни.

HolyDel 08.09.2011 23:38

Ответ: mutable volatile extern register auto typename explicit
 
Код:

class Node
mutable mat4 localmatrix;
...
const mat4& getLocalMatrix() const;
....
const mat4& getLocalMatrix() const
{
if(need_reaclc)
localmatrix = CalcLocalMatrix(position,orient,scale);
return localmatrix;
}


impersonalis 08.09.2011 23:45

Ответ: mutable volatile extern register auto typename explicit
 
иными словами - изменение члена класса (с идентификатором mutable) даже из const-метода (что и написано по ссылкам)

Mr_F_ 09.09.2011 00:15

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

class Node
mutable mat4 localmatrix;
...
const mat4& getLocalMatrix() const;
....
const mat4& getLocalMatrix() const
{
if(need_reaclc)
localmatrix = CalcLocalMatrix(position,orient,scale);
return localmatrix;
}
я не вкурил. какой смысл в const в функциях? что нельзя будет полученную матрицу менять, взяв её через getLocalMatrix? а mutable делает, что всё-таки можно менять? но ТОЛЬКО внутри объекта-носителя mutable данных?
как это связано с выражением "кеширование результата"?

impersonalis 09.09.2011 00:24

Ответ: mutable volatile extern register auto typename explicit
 
Холи привёл конкретный (частный) пример использования.
Цитата:

я не вкурил. какой смысл в const в функциях? что нельзя будет полученную матрицу менять, взяв её через getLocalMatrix? а mutable делает, что всё-таки можно менять?
конст-функция не изменяет члены класса, кроме тех, что объявлены с mutable (при попытке изменить неmutable член в конст-функции компилятор запротестует).

falcon 09.09.2011 00:52

Ответ: mutable volatile extern register auto typename explicit
 
HolyDel
мне почему то кажется, что конкретный пример - очень гадкая штука.
подчеркну, что это лишь моё скромное мнение, но методы должны выполнять одну, минимальную и очевидную(!) операцию. Т.е. то, что называется побочным действием было бы здорово свести к минимуму. В твоём же случае, обычный геттер от которого ждут обычного гета, да ещё и веря, что этот геттер ничего не сделает с данными (т.к. const) с какого-то неведомого перепуга, ребилдит матрицу и меняет данные!.. ну косяк же очевидный, не?..

HolyDel 09.09.2011 02:32

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

я не вкурил. какой смысл в const в функциях?
у ноды есть логическое состояние и физическое.
const заставляет физически быть объект константным
а mutable - логически.

почему лучше ориентироваться именно на логическое состояние:
возьмем для примера функцию построения бяки до ноды

Код:

void BuildBaka(Node *toNode)
{
...toNode()->getLocalMatrix();
...toNode()->setPosition -< логическая ошибка, не должно компилироваться. но если убрать константность метода - то компилироваться будет.
}

Код:

void BuildBaka(const Node *toNode)
{
...toNode()->getLocalMatrix(); <- без mutable не компилируется
...toNode()->setPosition <- не компилируется, логическая ошибка, все правильно.
}

Код:

ну косяк же очевидный, не?..
не. помоему получение матрицы очень даже минимальная команда. куда минимальнее?
или предлагаете выносить в клиентский код что то вроде:
Код:

if(node->NeedRebuildLocalMatrix())
node->RebuildLocalMatrix();

node->getLocalMatrix();

код, кстати, деалет совершенно то, что от него ожидают - возвращает локальную матрицу объекта
каким именно способом он это делает - клиенский код волновать не должно.

HolyDel 23.09.2011 16:01

Ответ: mutable volatile extern register auto typename explicit
 
вот хорошая статья:
http://alenacpp.blogspot.com/2005/10...constcast.html

impersonalis 23.09.2011 16:59

Ответ: mutable volatile extern register auto typename explicit
 
Цитата:

Сообщение от HolyDel (Сообщение 203215)
вот хорошая статья:
http://alenacpp.blogspot.com/2005/10...constcast.html

:) :)
Цитата:

Сообщение от impersonalis (Сообщение 201647)
Небольшой список "экзотических" ключевых слов (virtual, static и компания сюда не относятся :) ) с описаниями. Если по одной ссылке (на мой взгляд) сложно составить мнение о команде или рассказывается лишь одна область применения, то указаны несколько источников

mutable
http://www.quizful.net/post/cpp-keywords-usage
--> http://alenacpp.blogspot.com/2005/10...constcast.html <--

volatile
http://www.quizful.net/post/cpp-keywords-usage
http://alenacpp.blogspot.com/2006/04/volatile.html

extern
http://www.quizful.net/post/cpp-keywords-usage
http://www.sbp-program.ru/SBP-C-Memory-Class.htm#extern
http://www.gamedev.ru/code/forum/?id=56367

register
http://www.quizful.net/post/cpp-keywords-usage

auto
http://www.quizful.net/post/cpp-keywords-usage

typename
http://alenacpp.blogspot.com/2006/08/typename.html

explicit
http://jia3ep.blogspot.com/2008/07/e...nstructor.html
http://alenacpp.blogspot.com/2009/09/blog-post.html

const_cast
http://alenacpp.blogspot.com/2005/10...constcast.html
http://alenacpp.blogspot.com/2005/08/c.html

reinterpret_cast
http://alenacpp.blogspot.com/2005/08/c.html

dynamic_cast
http://alenacpp.blogspot.com/2005/08/c.html
http://ru.wikipedia.org/wiki/Dynamic_cast

static_cast
http://alenacpp.blogspot.com/2005/08/c.html
http://www.rsdn.ru/article/cpp/static_cast.xml


impersonalis 02.11.2011 18:05

Ответ: mutable volatile extern register auto typename explicit
 
Есть ещё такая группировка некоторых ключевых слов из 1-ого поста
http://ru.wikipedia.org/wiki/Класс_памяти


Часовой пояс GMT +4, время: 13:32.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot