strings: Use snprintf rather than sprintf
INC containers: Use .empty() rather than size() where possible
INC container: Use .rbegin() to get the last element of containers
INC: strings: Use .resize() instead of assignment

When doing:

    str = str.substr(0, len);

a reallocation is triggered. Instead, use .resize() to shrink the
string.
INC containers: Cache the size when parsing arguments
INC: strings: Store const& for local variables
INC strings: Unnecessary casts
IsOff: Use the length for the string construction

No need to waste the calculation and force the string to call strlen
again.
targets (assign): Use string for target name parameters
variables (assign): Pass variable names as strings

If a string is already available, pass it directly instead of making
another.
properties: Use strings when available
!simplification: Simplify if statements

When branching to change one argument, instead just use the ternary
conditional on the argument.
!simplification: Check variable values once

The:

    if (variableLookup(name))
      {
      std::string value = variableLookup(name);
      }

pattern is pervasive and can be optimized into:

    if (const char *tmp = variableLookup(name))
      {
      std::string value = tmp;
      }
strings (assign?): Avoid excess string construction

Calling the string ctor explicitly on a static string in addition with
other strings is unnecessary.
!strings: Avoid .c_str() when assigning to another string
strings (assign): Remove manual memory management in unset()
sources: Use strings for GetSource methods
SourceFileLocation: Consolidate logic in Matches
errors: Avoid string streams where possible

There's no need to do things like:

    std::stringstream sstr;
    sstr << "const string";
    function(sstr.str().c_str());
Target: Use else/if trees rather than an if tree

Skips lots of unnecessary string comparisons.