2016-11-21 3 views
0

у меня есть эти две функции и переменная в классе:C++ выполнения функций, которые возвращают строку

int _identation = 0; 

std::string ident(){ 
    _identation++; 
    return ""; 
} 

std::string newLine(){ 
    std::string text = "\n"; 
    for(int i = 0; i < _identation; i++){ 
     text+="\t"; 
    } 
    return text; 
} 

идент() функция просто увеличивает значение переменной и возвращает зЬй :: строковых (просто чтобы я мог использовать его в строках со строками).

Функция newLine() создает новую строку с символом '\ n' и помещает _identation '\ t', чтобы увеличить следующую строку.

Я не сейчас, если это относится к вопросу, но я использую какой-то шаблон дизайна посетителей. Я пытался сделать это на мой код:

std::string content = "<page>"+ident()+newLine(); 

, но случается, что мой компилятор делает функцию запустить Newline() первый и только после того, как она вызывает функцию идент(). Так что, если я хочу, чтобы мой код IDENT до создания новой строки я должен использовать это выражение:

std::string content = "<page>"+newLine()+ident(); 

Почему C++ читать эту строку с правой стороны налево? Я также сделал эту точную программу в Java, а JVM выполняет это выражение слева направо.

Thanks :)

+3

Порядок оценки функций в C++ не указан. Если функции, которые вы вызываете в неопределенно упорядоченном выражении, имеют требования к порядку, ваша программа, безусловно, будет ошибкой – WhiZTiM

+0

@WhiZTiM благодарит за ваш ответ. Что бы вы порекомендовали в моей ситуации? Используйте скобки или разделите это выражение на несколько строк? –

+1

Несколько операторов. Я не думаю, что скобки помогут. Если вам нужны вещи, которые нужно выполнить в указанном порядке, напишите несколько операторов, которые выполняются в указанном порядке. Это так просто. – ajb

ответ

1

Попробуйте выполнить их в разных строках.

std::string content = "<page>"; 
content+ident(); 
content+newLine(); 
Смежные вопросы