10283


C++で下記の(例1)のようにprintln関数を作り、main内で実行したところ、  
`warning: conversion from string literal to 'char *' is deprecated
[-Wc++11-compat-deprecated-writable-strings]`という警告が出てしまいます。  
文字列リテラルをchar * に変換するのは非推奨であるということだと思うのですがこの警告を回避するにはどうすればいいのでしょうか?

(例1)

[code]

    #include <iostream>
    
    void println(char *s) {
        std::cout << s << "\n";
    }
    
    int main() {
        println("Hello");
    }
    
[/code]


CC BY-SA 3.0
2015-05-17T06:52:18.207
10278
2015-05-17T08:05:18.860
5246
question
c++ c++11
C++で文字列のポインタを関数に渡した時の警告


既にh2so5さんがコメントされているように`const`を付けて

[code]

    void println(const char *s) {
        std::cout << s << "\n";
    }
    
[/code]

のようにします。  
これは、単に定数を受け付けるというよりは、  
（つまり定数のみを受け付けるのではなく）  
この関数で、変更しないことの表明ですので、

[code]

    char data[] = "test";
    println(data);
    
[/code]

も

[code]

    println("Hello");
    
[/code]

もどちらも実行できます。


CC BY-SA 3.0
2015-05-17T08:05:18.860
10283
2015-05-17T08:05:18.860
5044
10278
answer