编译器通常对字符串有特殊的优化吗?

Tra*_*isG 1 c++ string stdstring compiler-optimization

很多时候你会看到类似的东西

std::map<std::string, somethingelse> m_named_objects;
Run Code Online (Sandbox Code Playgroud)

要么

std::string state;

//...

if(state == "EXIT")
   exit();
else if(state == "california")
   hot();
Run Code Online (Sandbox Code Playgroud)

人们使用字符串纯粹是为了让事物更具可读性.使用整数ID可以轻松实现同样的功能.

现代编译器(msvc,g ++等)通常可以对这些类型的案例采用特殊优化吗?或者是否应该因性能不佳或其他原因而避免这种情况?

In *_*ico 6

现代编译器(msvc,g ++等)通常可以对这些类型的案例采用特殊优化吗?

据我所知,编译器不进行这些优化.这绝对不是"标准"优化.

...人们使用字符串纯粹是为了让事物更具可读性.

至少对于你的第二种情况,在我看来,枚举更具可读性并且可以更快(因为整数比较相对于字符串比较而言相当便宜).

enum State
{
    Alabama,
    Alaska,
    Arizona,
    Arkansas, 
    California,
    Colorado,
    Connecticut,
    Delaware,
    // ... More
};

// ...

State state = California;
if(state == California) { /* true */ }
Run Code Online (Sandbox Code Playgroud)

  • 最明显的优势是编译器会告诉你是否写了`california`而不是`California`. (3认同)
  • 如果放弃性能,使用枚举而不是字符串的最明显的优点是枚举可以在switch语句中使用,而字符串则不能. (2认同)