В документе "C++09: A Glimpse into the Future (http://www.devsource.com/article2/0,1895,2061094,00.asp)" рассказывается о новшествах, представленных в проекте стандарта C++ 09, принятие которого ожидается в 2009 году.
URL: http://www.devsource.com/article2/0,1895,2061094,00.asp
Новость: http://www.opennet.me/opennews/art.shtml?num=8929
Так и не понял смысл rvalue reference. На первый взгляд просто лишняя фича.
сообщение
invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'
in passing argument 1 of `void foo(int&)'на код
void foo (int& oof) { }
int main (int argn, char** argv) { foo (0); }что нибудь говорит ?
Конечно говорит. Ты передаёшь в foo ноль, константой. А судя по сигнатуре foo, ты должен передать именно переменную. Например:void foo(int& oof) {}
int main(...) { int v = 0; foo(v); }
> А судя по сигнатуре
О!
> foo, ты должен передать именно переменную.
Так вот, 0 - это lvalue, а v - rvalue.
Кто бы мог подумать?! :)) См., например, http://en.wikibooks.org/wiki/C++_Programming/Operators
Польза-то какая от этого? Если я написал int &, значит надо так. Я и поизменять могу захотеть внутри функции, к примеру. Что будет?
segmentation fault например как я понимаю. Передача ссылки на константу, которая может не находиться в writable памяти.
> Так вот, 0 - это lvalue, а v - rvalue.
Наоборот.
Здорово! Хорошие изменения. Еще бы разрешить template method specialization внутри классов и template friends, было бы совсем хорошо!
>Здорово! Хорошие изменения. Еще бы разрешить template method specialization внутри классов и
>template friends, было бы совсем хорошо!Точно. Этого сильно не хватает. Чтобы сделать частичную специализацию только одного метода класса, приходится частично специализировать весь класс. Т.е. полностью копировать все его описание, что приводит к полной ж.пе при сопровождении.
>>Здорово! Хорошие изменения. Еще бы разрешить template method specialization внутри классов и
>>template friends, было бы совсем хорошо!
>
>Точно. Этого сильно не хватает. Чтобы сделать частичную специализацию только одного метода
>класса, приходится частично специализировать весь класс. Т.е. полностью копировать все его
>описание, что приводит к полной ж.пе при сопровождении.Именно! А если еще разрешить локальным классам выступать хотя бы как параметры шаблонов не локальных классов... Т.е. например:
template <class T> void myMethod()
{
struct MyStruct : public T{};
std::vector<MyStruct> vec;
...
}