Убедитесь, что сценарий содержит
<?php
перед кодом, который должен быть выполнен. Между <?
и php
в этом не должно быть пробелов.
"Hello World"
является строковым литералом типа «массив из 12 const char
», который может быть преобразован в «указатель на const char
», который, в свою очередь, может быть преобразован в bool
. Это именно то, что происходит. Компилятор предпочитает это использовать конструктор преобразования std::string
.
Последовательность преобразования, включающая конструктор преобразования, известна как пользовательская последовательность преобразования . Преобразование из "Hello World"
в bool
является стандартной последовательностью преобразования . В стандарте указано, что стандартная последовательность преобразования всегда лучше, чем пользовательская последовательность преобразований (§13.3.3.2 / 2):
стандартная последовательность преобразования (13.3.3.1.1) представляет собой лучшая последовательность преобразования, чем пользовательская последовательность преобразования или последовательность преобразования многоточия
blockquote>. Этот анализ «лучшей последовательности преобразований» выполняется для каждого аргумента каждой жизнеспособной функции (и у вас есть только один аргумент) и лучшая функция выбирается с помощью разрешения перегрузки.
Если вы хотите убедиться, что вы выбрали версию
std::string
, вам нужно дать ейstd::string
:Output::Print(std::string("Hello World"));
FWIW, он может быть адресован таким образом (если шаблоны могут использоваться), если вы не хотите добавлять перегрузки для const char*
.
#include <iostream>
#include <string>
#include <type_traits>
template <typename Bool,
typename T = std::enable_if_t<std::is_same<Bool, bool>{}>>
void foo(Bool)
{
std::cerr << "bool\n";
}
void foo(const std::string&)
{
std::cerr << "string\n";
}
int main()
{
foo("bar");
foo(false);
}
std::string
(или предпочтительноconst std::string&
), так и наconst char*
. – Angew 8 February 2013 в 12:45Output::Print("Hello World")
, который переводится наOutput::Print(bool value)
, чего не ожидают? – kirsche40 17 February 2014 в 16:03