Сравнение в C ++ - PullRequest
       21

Сравнение в C ++

4 голосов
/ 22 декабря 2010

Является ли этот допустимый код в C ++ с точки зрения сравнения двух const char *

const char * t1="test1";
const char * t2="test2";

t2 = "test1";
if ( t1 == t2 ) {

cout << "t1=t2=" << t1 << endl;

}   

без использования strcmp?

Ответы [ 2 ]

6 голосов
/ 22 декабря 2010

Нет, вы сравниваете значения указателей (т.е. адресов), а не их содержимое. Этот код не является недействительным, просто он, вероятно, не делает то, что вы ожидаете.

В C ++ вам следует избегать const char * и перейти на std::string:

#include <string>

std::string t1("test1");
std::string t2("test2");
if (t1 == t2) {
    /* ... */
}
3 голосов
/ 22 декабря 2010

Это действительно, но не делает то, что вы думаете, что делает.== в указателях проверяет, указывают ли они на один и тот же адрес памяти.Если у вас есть две одинаковые строки в разных местах, это не будет работать.

Если вы знакомы с Python, это похоже на различие между is и == в этом языке.

...