c++ - C++11: Type of string literal is "array of the appropriate number of const characters" -
c++11: type of string literal "array of appropriate number of const characters";
"bohr" therefore of type const char[5]
void f() { char* p = "plato"; // error, accepted in pre-c++11-standard code p[4] = 'e'; // error: assignment const }
(which short excerpt of "the c++ programming language bjarne stroustrup (4th ed.)" on p. 176 in 7.3.2 "string literals") yet compiler (dev-c++11 5.6.2) either settings of iso-c++11 or gnu-c++11 doesn't warn or break compilation at
const char a[5] = "bohr"; const char *b = "bohr";
furthermore, question #2 @ cppquiz.org doesn't mention compiler breakage or other problems this: http://cppquiz.org/quiz/question/2
what output of below program in c+++11?
#include <iostream> #include <string> void f(const std::string &) { std::cout << 1; } void f(const void *) { std::cout << 2; } int main() { f("foo"); const char *bar = "bar"; f(bar); }
before writing author, wanted ask advice here; hope can me?
edit: line
char* p = "plato"; // error, accepted in pre-c++11-standard code
should, commented, not valid in c++-11-standard code, according latest book official creator of language, in
const char *b = "bohr";
there appears no problem in quiz compiler?
the type of string literal "bohr"
indeed const char[5]
.
however, can implicitly casted const char *
due to
§ 4.2 array-to-pointer conversion [conv.array]
an lvalue or rvalue of type “array of n t” or “array of unknown bound of t” can converted prvalue of type “pointer t”. result pointer first element of array.
edit:
i didn't realize confusion bjarne's statement // error, accepted in pre-c++11-standard code
. well, compilers need stay backwards-compatible don't throw error, give warning. claim isn't wrong however, since far language standard goes, c++11 rules error.
from clang example:
warning: conversion string literal 'char *' deprecated [-wc++11-compat-deprecated-writable-strings]
and gcc:
warning: deprecated conversion string constant ‘char*’ [-wwrite-strings]
Comments
Post a Comment