2016-08-19 20 views
1
#include <iostream> 
int foo(const char* keke) { 
    std::cout << keke; 
    return 0; 
} 
int main() 
{ 
    char* keke = new char(10); 
    char* const haha = keke; 
    return foo(haha); 
} 

爲什麼在編譯上面的代碼時沒有任何錯誤/警告?關於C++中的常量的隱式轉換

haha的類型是char* const,而foo只接收const char*類型的參數。可以將char* const隱式轉換爲const char*

+0

我重新提出這個問題,因爲它詢問隱式轉換,而不是差別。 – songyuanyao

回答

4

是的。這就是所謂的qualification conversions(的隱式轉換的一個):

(重點煤礦)

類型的指針甲prvalue到CV-合格類型T可以被轉換爲一個prvalue指針更CV-合格相同類型的T(換句話說,可以添加常量和波動性)。

「更多」 CV-合格意味着

一個指向非限定類型可以轉換爲一個指向常量;
...

它意味着char*可以隱式轉換爲const char*。在指針本身

const預選賽無所謂這裏,本身聲明的參數keke被按值傳遞的,它的罰款從haha複製的參數(即const指針; char* const)。

+0

函數調用中是否存在任何implict轉換?'在'value by value'中很好'... – Jichao

+0

@Jichao您是從'char * const'改爲'char *'的意思嗎?編號 – songyuanyao

+0

在函數調用中,不需要爲'char * const'和'char *'進行類型匹配嗎? – Jichao