2015-04-03 2 views
6

Сегодня я случайно положил const в начале моего конструктора (ошибка копирования пасты) и скомпилировал его. Я только пробовал это в Visual Studio 2008, который является pre C++ 11. Имеет ли этот синтаксис какой-либо смысл? Это ранние попытки Microsoft на constexpr?Есть ли такая вещь, как конструктор const?

class foo 
{ 
public: 
    const foo(int i){} 
}; 

foo f(1); 
+0

Интересно, какое влияние на него имеет, если таковое имеется, в VC++ 08. Это может быть просто проигнорировано? – user2864740

+0

Мне удалось вызвать неконстантные функции в теле конструктора, поэтому, если он имеет эффект, он не ограничивает того, что вызывается в конструкторе. – cppguy

+1

@cppguy это не так удивительно, так как ctor не объявляется как 'foo (int i) const'. Интересно, работает ли последний в VS (с изменяемой переменной-членом), хотя ctors не может быть cv-квалифицированным :) – vsoftco

ответ

4

Ваш код не соответствует стандарту, нет такой вещи. Однако, начиная с C++ 11, вы можете иметь конструкторы constexpr, поэтому ваш объект строится во время компиляции и может также использоваться в выражениях constexpr.

Хотя я не использую его, MSVS не лучший компилятор с точки зрения стандартного соответствия, по крайней мере, это то, что я понял из различных вопросов на этом сайте.

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