2014-04-08 3 views
0

Почему я не могу сделатьПочему я не могу сделать cout << 3 * ""; '?

cout << 3*" "; 

Ошибка:

E:\C++\test\main.cpp|12|error: invalid operands of types 'int.' and 'const char [2]' to binary 'operator*' 
+1

Почему вы должны быть способны? По умолчанию нет оператора *, который принимает число и строку и делает то, что вы хотите. У вас есть контекст или рамки, где это должно быть возможно? Или это простой C++ без расширений? – MatthiasB

+0

Добро пожаловать в переполнение стека! Просто подсказка: попробуйте лучше узнать выход компилятора, 'недопустимые операнды типов 'int'. и 'const char [2]' для двоичного 'оператора *' 'отвечает на ваш вопрос, если вы внимательно его читаете =) – Kahler

+0

std :: cout << std :: setw (5) << ""; –

ответ

5

Некоторые языки al низкий оператор умножения, который будет использоваться таким образом. Например Python позволяет писать:

3*" " 

и оценивает, что, как

" " 

Но C++ не позволяет это использование оператора умножения. Это именно то, что вам сообщает ошибка компиляции.

Вы пытаетесь создать строку, содержащую три пробела. Делайте это, например, с помощью конструктора заполнения стандартного класса строки:

std::string(3, ' ') 

И послать что cout:

std::cout << std::string(3, ' '); 
+0

Если он хочет, он может сделать 'std :: string operator * (int i, std :: string x) {std :: string r; тогда как (i -> 0) r + = x; return r; } с использованием пространства имен std :: litals :: string_literals; int main() {std :: cout << 3 * "x" s; return 0; } ' (в C++ 14) и иметь его в двух направлениях: D – Massa

2

Поскольку нет перегрузки operator*, что позволяет операнды int и const char [2]

Выражаясь проще, вы никогда не могли бы умножить 4 на привет в действительности, так почему это разрешено в C++

1

Как ошибка говорит, что нет operator * определены для типов int и const char [2] (const char [2] - тип строкового литерала " ")

Для этой операции можно использовать класс std :: string. Например

std::cout << std::string(3, ' ');;

Или даже вы могли бы использовать стандартный алгоритм std::fill_n

Например

std::fill_n(std::ostream_iterator<char>(std::cout), 3, ' '); 

Есть много подходов, чтобы сделать задачу.

Смежные вопросы