Ні.
Ну, начебто так, в тому сенсі , що існують люди , які вважають new
в new int
бути оператором. Однак ця думка (в основному) суперечить стандарту.
По-перше, [lex.operators/1]
перелічує оператори на мові. Не обманюйте себе, думаючи, що це також просто "оператори попередньої обробки"; не існує такої різниці у значенні лексичних операторів. Це також не мало б сенсу, оскільки ви не можете (наприклад) ++
макрос.
new
насправді є ключовим словом (за [lex.key/1]
).
Далі, давайте розглянемо сам вираз new . Тут все стає трохи більш шерстяним. Наприклад, є таке формулювання [expr.new/4]
:
Натомість версію нового оператора в явних дужках можна використовувати для створення об’єктів складених типів
Вважаю, що це редакційна помилка, оскільки вона суперечить викладеним вище визначенням і більше ніде не зустрічається в цьому розділі.
Тоді ми приходимо до перевантаження оператора . У своєму граматичному створенні для операторської декларації термінал із переліком речей (включаючи new
) називається operator ( [over.oper.general/1]
). Я не думаю, що нам потрібно турбуватися з цього приводу. Назви терміналів у граматиці ніколи не мали на меті ввести визначення термінів. Зрештою, у вас є і-вираз, що _не потрібно бути побітовою операцією І; це може бути просто вираз рівності :
і-вираз :
рівність-вираз
і-вираз &
рівність-вираз
Загальноприйнятим є визначення таких граматик, і це, безумовно, не означає, що кожен вираз рівності якось слід вважати викликом побітового оператора І.
Нарешті, деякі стверджували, що наступне формулювання (також у розділі перевантаження оператора) є доказом того, що new
зараз якимось чином, ізольовано, магічно є оператором:
Оператори new[]
, delete[]
, ()
і []
утворюються з більш ніж одного маркерів
Для них я кажу, що не тільки new
не входить до переліку, але тут явно використовується термін "оператор" у більш широкому розумінні "речі, які можуть бути перевантажені", хоча new
сам по собі все ще не є оператором . Це також у ненормативній примітці, яка повинна розповісти вам все, що вам потрібно знати.
І, як ви самі вказуєте, ми вже вважаємо operator new
щось інше.
new
якsizeof
тут. І я думаю, що більшість спільноти C ++ вважаєsizeof
себе оператором. Стенсар навітьsizeof
описує " оператора" при описі його наслідків.