Как предотвратить это неявное преобразование типов между int и std :: string, которое очень подвержено ошибкам.
Вот код
#include <iostream>
#include <string>
using namespace std;
int main() {
string s="string";
s = 123456789; //assign a int value to std::string
cout << s;
// your code goes here
return 0;
}
Приведенный выше код может быть скомпилирован без предупреждения, и результат очевиден не так, как задумал кодер. Можно ли этого избежать?
Обновить: 123456789
вызовет предупреждение о переполнении, если -Wall
флаг установлен. Но если я изменился в s = 98
больше не будет предупреждений. но я на самом деле хочу, чтобы строка была строкой 98
а не аськи b
персонаж. Как это предотвратить?
Из того, что я понимаю, вы бы хотели предупреждение, если что-то подобное произошло. Для этого вы должны включить все предупреждения. Добавить -Wall -Wextra
флаг во время компиляции.
Однако вам не нужны эти флаги в данном конкретном случае. Если вы не отключили предупреждения, вы должны получить implicit type conversion
предупреждение.
Как упоминалось в комментариях, чтобы включить предупреждение специально для этого случая, вы можете использовать -Wconstant-conversion
флаг.