Best way to initialize QString
I have a QString
variable as struct
member. What is the best way to initialize it with default value:
struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}
c++ string qt qstring
add a comment |
I have a QString
variable as struct
member. What is the best way to initialize it with default value:
struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}
c++ string qt qstring
2
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
1
Generally speaking: If you want to initialize aQString
from a char*, useQStringLiteral
. If you want to pass it to a method, check if that method has an overload forQLatin1String
- if yes you can use that one, otherwise fall back toQStringLiteral
. The only exception for both cases is an empty string - simply useQString()
.
– Felix
Nov 13 '18 at 12:06
add a comment |
I have a QString
variable as struct
member. What is the best way to initialize it with default value:
struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}
c++ string qt qstring
I have a QString
variable as struct
member. What is the best way to initialize it with default value:
struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}
c++ string qt qstring
c++ string qt qstring
asked Nov 13 '18 at 11:57
svadumsvadum
235
235
2
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
1
Generally speaking: If you want to initialize aQString
from a char*, useQStringLiteral
. If you want to pass it to a method, check if that method has an overload forQLatin1String
- if yes you can use that one, otherwise fall back toQStringLiteral
. The only exception for both cases is an empty string - simply useQString()
.
– Felix
Nov 13 '18 at 12:06
add a comment |
2
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
1
Generally speaking: If you want to initialize aQString
from a char*, useQStringLiteral
. If you want to pass it to a method, check if that method has an overload forQLatin1String
- if yes you can use that one, otherwise fall back toQStringLiteral
. The only exception for both cases is an empty string - simply useQString()
.
– Felix
Nov 13 '18 at 12:06
2
2
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
1
1
Generally speaking: If you want to initialize a
QString
from a char*, use QStringLiteral
. If you want to pass it to a method, check if that method has an overload for QLatin1String
- if yes you can use that one, otherwise fall back to QStringLiteral
. The only exception for both cases is an empty string - simply use QString()
.– Felix
Nov 13 '18 at 12:06
Generally speaking: If you want to initialize a
QString
from a char*, use QStringLiteral
. If you want to pass it to a method, check if that method has an overload for QLatin1String
- if yes you can use that one, otherwise fall back to QStringLiteral
. The only exception for both cases is an empty string - simply use QString()
.– Felix
Nov 13 '18 at 12:06
add a comment |
1 Answer
1
active
oldest
votes
QStringLiteral
will have the lowest runtime overhead. It is one of the few literal QString
initializations with O(1) cost. QLatin1String
will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…")
. The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(
Initialization via QStringLiteral
wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
@Mike That's pointless, though.QString str;
is all you need: it's a value type, and has a valid value after default-construction.
– Kuba Ober
Nov 14 '18 at 18:34
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280545%2fbest-way-to-initialize-qstring%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
QStringLiteral
will have the lowest runtime overhead. It is one of the few literal QString
initializations with O(1) cost. QLatin1String
will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…")
. The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(
Initialization via QStringLiteral
wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
@Mike That's pointless, though.QString str;
is all you need: it's a value type, and has a valid value after default-construction.
– Kuba Ober
Nov 14 '18 at 18:34
add a comment |
QStringLiteral
will have the lowest runtime overhead. It is one of the few literal QString
initializations with O(1) cost. QLatin1String
will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…")
. The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(
Initialization via QStringLiteral
wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
@Mike That's pointless, though.QString str;
is all you need: it's a value type, and has a valid value after default-construction.
– Kuba Ober
Nov 14 '18 at 18:34
add a comment |
QStringLiteral
will have the lowest runtime overhead. It is one of the few literal QString
initializations with O(1) cost. QLatin1String
will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…")
. The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(
Initialization via QStringLiteral
wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.
QStringLiteral
will have the lowest runtime overhead. It is one of the few literal QString
initializations with O(1) cost. QLatin1String
will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…")
. The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(
Initialization via QStringLiteral
wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.
answered Nov 13 '18 at 12:14
Kuba OberKuba Ober
69.7k982187
69.7k982187
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
@Mike That's pointless, though.QString str;
is all you need: it's a value type, and has a valid value after default-construction.
– Kuba Ober
Nov 14 '18 at 18:34
add a comment |
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
@Mike That's pointless, though.QString str;
is all you need: it's a value type, and has a valid value after default-construction.
– Kuba Ober
Nov 14 '18 at 18:34
QString str (QString());
– Mike
Nov 13 '18 at 20:39
QString str (QString());
– Mike
Nov 13 '18 at 20:39
1
1
@Mike That's pointless, though.
QString str;
is all you need: it's a value type, and has a valid value after default-construction.– Kuba Ober
Nov 14 '18 at 18:34
@Mike That's pointless, though.
QString str;
is all you need: it's a value type, and has a valid value after default-construction.– Kuba Ober
Nov 14 '18 at 18:34
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280545%2fbest-way-to-initialize-qstring%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Good writeup: QStringLiteral explained
– Swordfish
Nov 13 '18 at 11:59
@Swordfish Thanks for the link, interesting article.
– svadum
Nov 13 '18 at 12:05
1
Generally speaking: If you want to initialize a
QString
from a char*, useQStringLiteral
. If you want to pass it to a method, check if that method has an overload forQLatin1String
- if yes you can use that one, otherwise fall back toQStringLiteral
. The only exception for both cases is an empty string - simply useQString()
.– Felix
Nov 13 '18 at 12:06