2009-03-28 42 views
15

Với đoạn mã sau:Ý nghĩa của việc có khoảng trống trong định nghĩa hàm tạo là gì?

#pragma once 

class B 
{ 
public: 

    B(void) 
    { 
    } 

    ~B(void) 
    { 
    } 
}; 

Tôi biết tôi cũng có thể viết này:

#pragma once 

class B 
{ 
public: 

    B() 
    { 
    } 

    ~B() 
    { 
    } 
}; 

mục đích của việc có void trong ví dụ đầu tiên là gì? Có một số loại thực hành cho biết hàm tạo có thông số không không?

+0

tôi thấy cuộc thảo luận này khá thú vị khi đó: http://stackoverflow.com/questions/540748/void-void-c-and-c –

Trả lời

34

Hai là giống nhau, ít nhất là trong C++. Trong C, việc cung cấp một cặp dấu ngoặc đơn trống thường có nghĩa là một danh sách tham số không xác định (trái ngược với một danh sách tham số trống). C++ không có vấn đề này.

Làm thế nào để câu trả lời đúng được giảm giá nhiều lần? Tuy nhiên, một lỗi SO?

+2

Ít nhất bạn đang ở trong tích cực. Gần đây tôi đã có một câu trả lời được chấp nhận (đúng) đã kết thúc với các phiếu bầu âm. Phiền. – JaredPar

+0

@ JaredPar: Và tôi đã nói đùa về điều này cũng sẽ xảy ra với một đồng nghiệp vài ngày trước.Tôi có 3 câu trả lời được chấp nhận bị xóa trong 3 ngày qua - gây sốc? – dirkgently

+0

@dirkgently, đó là lẻ. Tôi nghĩ rằng tôi trung bình khoảng 1 câu trả lời được chấp nhận loại bỏ mỗi 2-3 tuần. 3 trong 3 ngày chắc chắn là cao. – JaredPar

0

afaik nếu bạn vượt qua void vào hàm tạo hoặc bất kỳ hàm nào làm đối số, nghĩa là hàm dosnt lấy bất kỳ đối số nào để ví dụ a và b bằng nhau. nhưng tôi không chắc chắn nếu bất kỳ người trong số họ thay đổi chữ ký chức năng trong bất kỳ cách nào hoặc làm cho nó chạy nhanh hơn vv.

8

Một thời gian dài trước đây bạn đã làm một cái gì đó như thế này trong C (tôi trước ISO C là Rusty :)):

void foo(a, b) 
    int a, 
    int b 
{ 
} 

trong khi C++ đã được tạo ra tên mangling cần các loại của các đối số , vì vậy cho C++ nó đã được đổi thành:

void foo(int a, int b) 
{ 
} 

và sự thay đổi này đã được đưa về phía trước để C.

Tại thời điểm này, tôi tin rằng để tránh phá vỡ ing mã C hiện nay:

void foo() 

và điều này:

void foo(void) 

nghĩa hai việc rất khác nhau, () nghĩa không kiểm tra số lượng tham số hoặc gõ, và (void) nghĩa không có đối số. Đối với C++ () nghĩa là không kiểm tra bất cứ điều gì sẽ không hoạt động như vậy ()(void) có nghĩa là điều tương tự trong C++.

Vì vậy, đối với C++ ()(void) luôn giống nhau.

Ít nhất đó là làm thế nào tôi nhớ nó ... :-)

0

Tôi chỉ muốn nói thêm rằng khi bạn sử dụng khoảng trống sau khi các thông số như function(): void nó được sử dụng để chỉ ra rằng chức năng thực hiện không trả lại giá trị.

Các vấn đề liên quan