fiexed C.49

remover contradiction to C.45 (#1092) ) and mention string_view
This commit is contained in:
Bjarne Stroustrup
2018-10-12 14:48:17 -04:00
parent 8825798df6
commit 2cfcd878c4

View File

@@ -5560,7 +5560,7 @@ An initialization explicitly states that initialization, rather than assignment,
class A { // Good
string s1;
public:
A() : s1{"Hello, "} { } // GOOD: directly construct
A(const char* p) : s1{p} { } // GOOD: directly construct
// ...
};
@@ -5569,7 +5569,7 @@ An initialization explicitly states that initialization, rather than assignment,
class B { // BAD
string s1;
public:
B() { s1 = "Hello, "; } // BAD: default constructor followed by assignment
B(const char* p) { s1 = p; } // BAD: default constructor followed by assignment
// ...
};
@@ -5580,6 +5580,18 @@ An initialization explicitly states that initialization, rather than assignment,
// ...
};
##### Note:
Instead of those `const char*`s we could `gsl::string_span or (in C++17) `std::string_view`
as [a more general way to present arguments to a function](#Rstr-view):
class D { // Good
string s1;
public:
A(string_view v) : s1{v} { } // GOOD: directly construct
// ...
};
### <a name="Rc-factory"></a>C.50: Use a factory function if you need "virtual behavior" during initialization
##### Reason