Trong PHP và C #, các hằng có thể được khởi tạo khi chúng được khai báo:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
Tôi có khai báo C ++ sau của một hàm được sử dụng với một lớp khác để so sánh hai vectơ toán học:
struct equal_vec
{
bool operator() (const Vector3D& a, const Vector3D& b) const
{
Vector3D dist = b - a;
return ( dist.length2() <= tolerance );
}
static const float tolerance = 0.001;
};
Mã này được biên dịch mà không gặp vấn đề với g ++. Bây giờ ở chế độ C ++ 0x (-std = c ++ 0x) trình biên dịch g ++ xuất ra thông báo lỗi:
error: 'constexpr' cần thiết để khởi tạo trong lớp của thành phần dữ liệu tĩnh 'dung sai' của kiểu không tích phân
Tôi biết tôi có thể định nghĩa và khởi tạo static const
thành viên này bên ngoài định nghĩa lớp. Ngoài ra, một thành viên dữ liệu hằng số không tĩnh có thể được khởi tạo trong danh sách khởi tạo của một phương thức khởi tạo.
Nhưng có cách nào để khởi tạo một hằng trong khai báo lớp giống như nó có thể trong PHP hoặc C # không?
Cập nhật
Tôi đã sử dụng static
từ khóa chỉ vì có thể khởi tạo các hằng số như vậy trong khai báo lớp trong g ++. Tôi chỉ cần một cách để khởi tạo một hằng số trong một khai báo lớp bất kể nó có được khai báo là static
hay không.
I used static keyword just because it was possible to initialize such constants within the class declaration in g++. I just need a way to initialize a constant in a class declaration no matter if it declared as static or not.
Đó là cách sai lầm để quyết định một thành viên có nênstatic
hay không. Đừng bao giờ để sự lười biếng từ vựng quyết định ngữ nghĩa của mã của bạn.