Для технического обзора - пропустить этот ответ .
Для менее технического вида & amp; введение - пропустить этот ответ .
(Именован) Оптимизация возвращаемого значения является распространенной формой копирования. Это относится к ситуации, когда объект, возвращаемый значением из метода, имеет свою копию. Пример, приведенный в стандарте, иллюстрирует именованную оптимизацию возвращаемого значения, так как объект назван.
class Thing {
public:
Thing();
~Thing();
Thing(const Thing&);
};
Thing f() {
Thing t;
return t;
}
Thing t2 = f();
Оптимизация регулярного значения возвращается, когда возвращается время:
class Thing {
public:
Thing();
~Thing();
Thing(const Thing&);
};
Thing f() {
return Thing();
}
Thing t2 = f();
Другие распространенные места, где происходит копирование, - это когда время передается по значению:
class Thing {
public:
Thing();
~Thing();
Thing(const Thing&);
};
void foo(Thing t);
foo(Thing());
или когда исключение выбрано и поймано по значению:
struct Thing{
Thing();
Thing(const Thing&);
};
void foo() {
Thing c;
throw c;
}
int main() {
try {
foo();
}
catch(Thing c) {
}
}
Общие ограничения для копирования:
Большинство компиляторов коммерческого уровня поддерживают copy elision & amp; (N) RVO (в зависимости от настроек оптимизации).
Если Ваша строка будет всегда иметь тот формат, regex является излишеством:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
Попробуйте
/{(.*?)}/
, Который означает, соответствуйте какому-либо символу между {и}, но не будьте жадными - соответствуют самой короткой строке, которая заканчивается} (? остановки * быть жадным). Круглые скобки позволяют Вам извлечь подобранную часть.
Иначе был бы
/{([^}]*)}/
, Это соответствует любому символу кроме} символ (другой способ того, чтобы не быть жадным)
/\{([^}]+)\}/
/ - delimiter
\{ - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
( - start capturing
[^}] - character class consisting of
^ - not
} - a closing brace (no escaping necessary because special characters in a character class are different)
+ - one or more of the character class
) - end capturing
\} - the closing literal brace
/ - delimiter
Этот работает в Textmate и соответствует всему в файле CSS между фигурными скобками.
\{(\s*?.*?)*?\}
selector {.
.
совпадения здесь
включая пустое пространство.
.
.}
Если вы хотите в дальнейшем иметь возможность возвращать содержимое, заключите все это в еще один набор круглых скобок, например:
\{((\s*?.*?)*?)\}
, и вы сможете получить доступ к содержимому через $ 1.
Это также работает для функций, но Я не тестировал его с вложенными фигурными скобками.