Re[3]: Где глюк? :)
От: jazzer Россия Skype: enerjazzer
Дата: 23.09.04 06:50
Оценка: 10 (1)
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, jazzer, Вы писали:


А>>>int a[2];

А>>>int i = 0;
А>>>a[i++] = i эквивалентно a[0] = 0;

J>>либо а[0] = 1;


K>что, думаешь здесь неопределённое поведение?


ну смотри сам, так как во всей этой инструкции всего одна точка следования в конце инструкции, здесь 2 пути вычислений, приводящие к разным результатам:
1) сохраняем значение i (0) для присваивания, выполняем разадресацию [0], выполняем присваивание (0), инкрементим i.
2) выполняем разадресацию [0], инкрементим i, выполняем присваивание (1).
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Где глюк? :)
От: Аноним  
Дата: 22.09.04 10:40
Оценка:
Вот напоролся на такую проблему
есть код
typedef std::map<std::string,std::string> ConfigStrings;
ConfigStrings сonfigStrings;
std string buffer = "<DEMOMODE> 0"
boost::char_separator<char> sep("<> ");
Tokenizer tok(buffer,sep);
Tokenizer::iterator beg = tok.begin();
configStrings[*beg++] = *beg;
в результате configStrings["DEMOMODE"] = "0".
Разве так должно быть?
ведь
int a[2];
int i = 0;
a[i++] = i эквивалентно a[0] = 0;
И еще что интересно,если заменить std::string классом-оберткой от std::string,то
configStrings["DEMOMODE"] = "DEMOMODE"
Re: Где глюк? :)
От: Аноним  
Дата: 22.09.04 10:51
Оценка:
Ну так мэп то индексируется стрингом, а итератор "указывает" на пару строка-строка

Как это вообще у тебя компилируется?
Re[2]: Где глюк? :)
От: Аноним  
Дата: 22.09.04 11:26
Оценка:
Извини, поспешил. Не разглядел токенизера и т.д.
Re: Где глюк? :)
От: korzhik Россия  
Дата: 22.09.04 12:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот напоролся на такую проблему

кстати странно
#include <map>
#include "boost/tokenizer.hpp"

int main()
{
    typedef std::map<std::string,std::string> ConfigStrings;
    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
  
    ConfigStrings configStrings;
  
    std::string buffer = "<DEMOMODE> 0";
    boost::char_separator<char> sep("<> ");

    tokenizer tok(buffer,sep);

    tokenizer::iterator beg = tok.begin();
    
    configStrings[*beg++] = *beg;

    std::cout << configStrings["DEMOMODE"] << std::endl;

    int arr[1] = {1};
    integer ii;
    arr[*ii++] = *ii;
    std::cout << arr[0]<< std::endl;
}

вывод:
0
0

я тоже не понимаю
может объяснит кто нибудь
Re: Где глюк? :)
От: jazzer Россия Skype: enerjazzer
Дата: 22.09.04 13:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот напоролся на такую проблему

А>есть код
А>typedef std::map<std::string,std::string> ConfigStrings;
А>ConfigStrings сonfigStrings;
А>std string buffer = "<DEMOMODE> 0"
А>boost::char_separator<char> sep("<> ");
А>Tokenizer tok(buffer,sep);
А>Tokenizer::iterator beg = tok.begin();
А>configStrings[*beg++] = *beg;
А>в результате configStrings["DEMOMODE"] = "0".
А>Разве так должно быть?
А>ведь
А>int a[2];
А>int i = 0;
А>a[i++] = i эквивалентно a[0] = 0;
А>И еще что интересно,если заменить std::string классом-оберткой от std::string,то
А>configStrings["DEMOMODE"] = "DEMOMODE"

либо а[0] = 1;
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Где глюк? :)
От: korzhik Россия  
Дата: 22.09.04 13:25
Оценка:
Здравствуйте, jazzer, Вы писали:

А>>int a[2];

А>>int i = 0;
А>>a[i++] = i эквивалентно a[0] = 0;

J>либо а[0] = 1;


что, думаешь здесь неопределённое поведение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.