tôi có dưới đây function (Chỉ cần để tái tạo vấn đề):Template luận khấu trừ cho 'char *'
template <typename KeyT>
void func(const KeyT cptr) {
std::cout << typeid(KeyT).name() << std::endl;
}
Tôi muốn gọi này với một chuỗi chữ, như dưới đây:
func<char*>("literal");
Nhưng, tôi cuối cùng nhận được dưới đây cảnh báo:
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wc++11-compat-deprecated-writable-strings]
tôi có một nhu cầu cụ thể để sử dụng char*
as type chính của tôi và tôi đã cũ pecting TAD
để xem xét param type
là toàn bộ như tôi không dùng nó bằng cách tham chiếu.
Cảnh báo đi kèm với cả hai trình biên dịch clang
và g++
.
Làm cách nào để khấu trừ param type
ở đây?
Xin cảm ơn trước.
'cptr' kết thúc bằng một con trỏ tới ký tự (' char * const'), không phải là con trỏ tới const char. – melpomene
@melpomene Điều đó kết thúc như thế nào? – Arunmu
Tuyên bố của bạn nói 'cptr' phải là' const', và bạn khởi tạo 'KeyT' bằng' char * '. Vì vậy, 'cptr' là một const KeyT (với KeyT = pointer-to-char). – melpomene